在React JS中触发onchange事件的最佳方法是什么

wallice:

我们使用Backbone + ReactJS捆绑包来构建客户端应用程序。严重依赖臭名昭著的是,valueLink我们通过自己的支持ReactJS接口进行双向绑定的包装器将值直接传播到模型。

现在我们面对这个问题:

我们有一个jquery.mask.js插件,可以以编程方式格式化输入值,因此不会触发React事件。当模型从用户输入中接收未格式化的值而从插件中丢失格式化的时,所有这些都会导致情况

似乎React依赖于浏览器有很多事件处理策略。有什么通用的方法可以触发特定DOM元素的更改事件,以便React可以听到吗?

咧嘴笑

对于React 16和React> = 15.6

设置.value=器无法正常工作,因为React库会覆盖输入值设置器,但我们可以直接在inputas上下文中调用该函数

var nativeInputValueSetter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value").set;
nativeInputValueSetter.call(input, 'react 16 value');

var ev2 = new Event('input', { bubbles: true});
input.dispatchEvent(ev2);

对于textarea元素,你应该使用prototypeHTMLTextAreaElement类。

新的codepen示例

所有学分这个贡献者他的解决方案

仅适用于React <= 15.5的过时答案

有了react-dom ^15.6.0您可以使用simulated标志事件对象的事件经过

var ev = new Event('input', { bubbles: true});
ev.simulated = true;
element.value = 'Something new';
element.dispatchEvent(ev);

用一个例子做了一个codepen

为了理解为什么需要新标记,我发现此注释非常有帮助:

现在,React中的输入逻辑对重复事件的重复事件进行重复数据删除,因此每个值不会触发多次。它侦听浏览器的onChange / onInput事件以及DOM节点值prop上的设置(当您通过javascript更新值时)。这具有副作用,即如果您手动更新输入的值,则input.value ='foo'然后使用{target:input}分派一个ChangeEvent React将同时注册集合和事件,看到它的值仍然是''foo ',将其视为重复事件并吞下。

在正常情况下,这可以正常工作,因为“真实的”浏览器启动的事件不会触发element.value上的设置。您可以通过使用模拟标志标记触发的事件来暗中逃避此逻辑,并且反应将始终触发该事件。https://github.com/jquense/react/blob/9a93af4411a8e880bbc05392ccf2b195c97502d1/src/renderers/dom/client/eventPlugins/ChangeEventPlugin.js#L128

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用React Js的最佳方法是什么:Redux,Hooks或Context?

在react.js中处理未定义的道具的最佳方法是什么?

在React中,定义动作类型的最佳方法是什么?

在React Redux中处理提取错误的最佳方法是什么?

在React Native中安排任务的最佳方法是什么?

在React中检查条件的最佳方法是什么?

在React中创建形状的最佳方法是什么?

在 React 中获取输入值的最佳方法是什么

在 React 中调用处理函数的最佳方法是什么?

onChange没有在React JS中触发

React onChange事件不会触发

在Mozilla和IE React js / Redux中不会触发onChange事件

在React中重新渲染选择元素后触发onChange事件

为什么在React js下拉菜单中不触发onchange?

在React / React Native中获取道具的最佳方法是什么

React 多次触发 onchange 事件,即 11

隐藏的输入不会触发React的onChange事件

React、onChange 和 onClick 事件同时触发

为React JS Ajax调用创建加载动画的最佳方法是什么?

获得React JS私有方法的最佳实践是什么?

在 React/JS 中格式化它的最佳方法是什么?

连接Django模型选择字段和React js选择选项的最佳方法是什么

使用asp .net core web api配置react js应用程序的最佳方法是什么

创建单页应用程序 React JS 的最佳方法是什么?

在React JS中存储API根网址的最佳位置是什么?

React + Redux-在表单组件中处理CRUD的最佳方法是什么?

在React Native中添加全屏背景图像的最佳方法是什么

在React应用程序中获取文档滚动百分比的最佳方法是什么?

在React Redux中实现撤消状态更改的最佳方法是什么(撤消存储/历史实现)