Javascript 在React中使用onClick处理程序输入?

Javascript 在React中使用onClick处理程序输入?,javascript,html,reactjs,frontend,dom-events,Javascript,Html,Reactjs,Frontend,Dom Events,由于change事件仅在某些浏览器(即IE)中,当焦点丢失时才会为input触发,因此我的理解是click事件是监听更改的更好方式(请参阅) 但是,当我仅向react中的受控输入元素提供带有onClick处理程序的checked属性时,它会抱怨: Warning: Failed prop type: You provided a `checked` prop to a form field without an `onChange` handler. This will render a rea

由于
change
事件仅在某些浏览器(即IE)中,当焦点丢失时才会为
input
触发,因此我的理解是
click
事件是监听更改的更好方式(请参阅)

但是,当我仅向
react
中的受控
输入元素提供带有
onClick
处理程序的
checked
属性时,它会抱怨:

Warning: Failed prop type: You provided a `checked` prop to a form field without an `onChange` handler. This will render a read-only field. If the field should be mutable use `defaultChecked`. Otherwise, set either `onChange` or `readOnly`.

这里的解决方案是什么?
react
文档似乎建议使用
onChange
,但这与上面列出的答案中的建议相冲突。

react提供了一个跨浏览器的包装器,该包装器被调用以提供事件的规范化接口,但文档没有明确说明哪些情况得到了处理或没有得到处理。关于IE的edge案例,从2015年开始,它已经得到处理:

。。。react使用本机click事件侦听用户与收音机的交互,然后调用onchange以获取输入。这样做的原因(至少根据代码中的注释)是因为IE8在模糊之前不会触发更改事件,所以为了与IE8“兼容”,使用了click事件

在我看来,情况确实如此:


因此,我会像你在现代浏览器上一样使用
onChange
,如果你发现IE上的行为有所不同,我会担心自己会这样做(甚至会在React的回购中打开一个新版本)。

@RahulSharma不幸的是,没有-在我的情况下,它是一个受控组件。React提供一个规范化的界面。我可以从2015年的文章中找到如下内容:“…react使用本机单击事件来监听用户与收音机的交互,然后调用onchange进行输入。之所以这样做(至少根据代码中的注释),是因为IE8在模糊之前不会触发更改事件…”-听起来这件事可能已经解决了。您尝试过吗?您在问题中发布的问题中使用更改(例如基于反应的答案)时遇到了什么问题?看看,在我看来,你提到的IE的边缘情况已经得到了处理,
onChange
的行为将与你在现代浏览器上所期望的一样。我只想使用
onChange
而不是自己担心它,除非你能自己测试它。当然,给我一秒钟!
function shouldUseClickEvent(elem) {
  // Use the `click` event to detect changes to checkbox and radio inputs.
  // This approach works across all browsers, whereas `change` does not fire
  // until `blur` in IE8.
  const nodeName = elem.nodeName;
  return (
    nodeName &&
    nodeName.toLowerCase() === 'input' &&
    (elem.type === 'checkbox' || elem.type === 'radio')
  );
}