【发布时间】:2016-07-25 21:17:05
【问题描述】:
我正在处理或大修一个非常大的 React 应用程序。我有一个在 React 中处理的表单(并与 webpack 捆绑在一起)。在成功提交表单时,我需要刷新页面上的数据表(React/Webpack 不处理)。我试图在页面上注册一个侦听器并通过 jQuery 在 React 中触发事件,但该事件没有向侦听器注册。我做错什么了吗?
在 webpack 插件中(不使用开发服务器):
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
}),
在我的 React 代码中:
handleCreated = () => {
$(document).trigger('reload:datatable');
// ...
}
在页面上(在脚本标签中):
$(document).on('reload:datatable', function (e) {
console.log('reload.task.table'); // This never gets called
});
【问题讨论】:
-
我认为不推荐使用 jQuery 和 React - jQuery 直接修改 DOM,而 React 使用虚拟 DOM。
-
我仅次于 Toby,你不能在 React 中使用 jquery 事件
-
我的 2 美分:确保在安装 React 表单之前注册监听器
-
@Toby 虽然我同意将 React 与 jQuery 混合不是“首选”,但在某些情况下您没有太多选择(即转换遗留项目)。然而,这就是 React 的伟大之处,你可以接管页面的某些部分,直到最终可以转换所有内容。
-
@TudorIlisoi 如果我创建一个新的 CustomEvent(对旧浏览器使用 polyfill),它就可以工作!不确定为什么它不适用于 jQuery 事件,但如果您想用您的评论创建答案,我会将其标记为正确。谢谢!
标签: javascript jquery reactjs webpack