2017-07-29 66 views
1

我很困惑一点关于如何应对手柄的onChange事件无线电输入:阵营火的单选按钮更改事件只有一次

var Hello = React.createClass({ 
onChange: function(e) { 
    console.log(e); 
}, 
render: function() { 
    return (
    <form onChange={this.onChange}> 
     <input type='radio' name='a' value="1" /> 
     <input type='radio' name='a' value="2" /> 
     <input type='checkbox' name='a' /> 
     <input type='checkbox' name='a1' /> 
    </form> 
    ) 
    } 
}); 

看来无线电它将触发事件只有一次,而对于复选框键入按预期工作?
我做错了什么?

请考虑the fiddle

+0

你拨弄不匹配你想证明什么。 –

+1

收音机可能很奇怪。 React尝试对所有输入进行规范化处理,以及它们如何触发onChange,但它不像您期望的那样工作。你应该得到一个为你抽象(例如onClick => onChange)的广播组组件,然后冒泡'onChange'作为一般用途。 https://github.com/chenglou/react-radio-group –

+0

对于如何在反应本身中处理这个问题,一直存在着讨论和分歧。看到https://github.com/facebook/react/issues/8727等 - 传统的DOMApi只是点击。 onChange在反应API中添加了一致性 - 并不意味着它按照您的预期工作。 –

回答

2

onChange回调添加到输入端,而不是整个表单。您可以更上宣读了在这个问题上Entire form onChange

+0

事实并非如此,我已经试过了这个 – user683680

+0

@ user683680怎么不行?检查这个更新的小提琴https://jsfiddle.net/73rxtk2k/1/(也解决了双重命名的问题) – jontro

1
In 15.6.1, the first change fires, but all subsequent changes do not fire. In 15.5.4, all changes fire. 

将固定在15.6.2版本https://github.com/facebook/react/issues/10168

+0

降级时,不要忘记降级反应。在我的情况下,react-dom不会自动降级,从而破坏了我的应用程序。 –