javascript - 如何使用react触发change事件

标签 javascript reactjs backbone.js

目前我的 Backbone 有这个功能。

触发 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组件在此模型中添加日期字段,但是当我选择日期时,backbone的这个功能不会触发onChange事件。 这是组件:https://github.com/Hacker0x01/react-datepicker

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

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

这工作正常,但是当我在日期选择器中选择新日期时,它将旧值传递给模型。 当 onchange 被触发时,值还没有更新。

我该如何解决这个问题?

谢谢大家

最佳答案

这可能是因为您在组件因 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.还有更多 React 风格 - 将回调函数作为 prop 传递给您的组件并执行它 handleChange 而不是触发 input 更改。像这样:

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

  this.prop.onChangeCallback(date);
}

* 您可以在组件生命周期的特定点执行onChangeCallback。阅读 Lifecycle Methods来决定哪一点。

关于javascript - 如何使用react触发change事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43922262/

相关文章:

javascript - 事件的主干集合

Backbone.js 路由器在放置时触发,而不是在发布时触发

javascript - 始终在桌面上显示 div 并在移动屏幕上切换点击

javascript - 异步/等待不适用于 AWS S3 Node.js SDK

jquery - 如何使用backbone.js制作搜索表单

javascript - 在项目单击上提交选中的 Atlaskit Dropdown(@atlaskit/dropdown-menu) 菜单复选框

javascript - 如何在 React 组件内为整数数据类型初始化状态?

javascript - 表格排序 - 我想在对父行进行排序时将子行与父行一起移动

javascript - 从标签获取值而不使用 id 或 class

javascript - 如何在react渲染中显示而不重新渲染,自动更改mobx存储实例的值?