当前位置: 首页 > 知识库问答 >
问题:

如何使用react触发更改事件

乐正洲
2023-03-14

目前我在主干中有这个功能。

它会在触发onChange事件时更新模型。

bindElementToAttribute: function(el, name, eventType) {
    var that = this;
    eventType = typeof(eventType) != 'undefined' ? eventType : "change";
    $(el).on(eventType, function() {
      var obj = {};
      obj[name] = $(el).val();
      that.model.set(obj, {silent: true});
      return true;
    });

我正在使用react的datepicker组件在这个模型中添加一个日期字段,但是主干的这个函数在我选择日期时不会触发onChange事件。这是一个组件:https://github.com/Hacker0x01/react-datepicker

在我的组件中,我手动触发了“更改”事件

handleChange(date) {
    this.setState({
      startDate: date
    });
    $('input[name=release_date]').trigger('change')
  }

这很好,但当我在datepicker中选择新日期时,它会将旧值传递给模型。触发onchange时,该值尚未更新。

我怎样才能解决这个问题?

谢谢大家

共有1个答案

周良弼
2023-03-14

这可能是因为在组件作为setState的结果重新呈现之前触发了事件,因此获得了Dom的旧值。

两个选项来解决这个问题:

1.您可以将setState作为第二个参数传递回调函数,如下所示:

this.setState({
  startDate: date
}, function(){$('input[name=release_date]').trigger('change')});

一旦setState完成并重新呈现组件,将执行回调函数。(请在此阅读更多信息:http://reactjs.cn/react/docs/component-api.html#setstate).

2.和更多响应-将回调函数作为prop传递给组件,并执行它handleChange,而不是触发input更改。这样地:

handleChange(date) {
  this.setState({
    startDate: date
  });

  this.prop.onChangeCallback(date);
}

*您可以在组件生命周期的特定点执行onChangeCallback。阅读有关生命周期方法的信息,以确定哪一点。

 类似资料:
  • 问题内容: 我想要类似的东西: 问题答案: 类更改时不会引发任何事件。另一种方法是在以编程方式更改类时手动引发事件: 更新 这个问题似乎正在吸引一些访问者,因此这里是一种更新方法,可以使用该方法而不必使用new修改现有代码: 请注意,只能用于更新的浏览器,特别是Chrome 26,FF 14,IE 11,Opera 15和Safari6。如果需要支持旧版浏览器,则需要使用我在第一个示例中概述的方法

  • 问题内容: 我正在使用Chrome扩展程序,我想检测用户何时键入URL。我知道: 但是,只要URL更改(例如,页面自动重新加载或用户单击链接等),它就会被调用。 我希望能够仅通过用户输入URL来确定URL是否已更改。 问题答案: 您可以使用(MDN)事件获取此信息。事件侦听器接收属性(MDN),该属性根据导航的原因将是不同的值(MDN)。哪个值,您触发将取决于 正是 您所渴望的东西。对于你的描述,

  • 问题内容: 有什么方法可以在属性更改时触发事件(可能是自定义的)? 比方说,当IMG src更改或DIV的innerHtml吗? 问题答案: 注意:突变事件已从标准中删除,现已弃用。有关如何使用其替代内容的信息,请参见其他答案或文档。 您指的是DOM突变事件。浏览器对这些事件的支持较差(但正在改善)。jQuery的MutationEvents插件可能会为您提供一些帮助。

  • 问题内容: 我有一个div,其内容可能会以各种方式更改:例如,可以通过innerHTML重新加载其整个内容,或者可以通过DOM方法添加节点。反过来,这可能是通过本地javascript发生的,也可能是通过调用jQuery API或其他库间接发生的。 我希望在div的内容改变为执行一些代码,但我 绝对没有控制 上 如何 将改变。确实,我正在设计一个可供其他人使用的小部件,他们可以自由选择自己喜欢的d

  • 我的组件具有以下功能: 我可以在我的html页面中插入选择菜单,但更改事件不会在我选择项目时触发。有人能让我知道为什么会发生这种情况吗? 谢谢

  • 我正在将我的grails应用程序从activiti迁移到camunda(两者都用作grails插件)。因为没有完全(自动)的数据库迁移,我必须自己做一些更改(使用db迁移插件)。camunda将只创建几个新表(如果属性cmmn设置为true)。 谢谢你的帮助,丹尼尔