更改输入时,它仅打印'input changes'
,但不打印'bubbles'
。知道为什么吗?
const InputWrapper = React.createClass({
change () {
console.log('input changes')
},
render () {
return (
<input onChange={this.change}/>
);
}
});
const App = React.createClass({
change () {
console.log('bubbles');
},
render () {
return (<InputWrapper onChange={this.change} />);
}
});
https://jsfiddle.net/stevemao/6nxvvkwy/5/
编辑:如果不this.props.change
调用InputWrapper
,它是否会自动冒泡?来自官方文档:与所有DOM事件一样,onChange prop支持所有本机组件,可用于监听冒泡的更改事件。
答案 0 :(得分:0)
非常简单......当您在this.change
中呼叫InputWrapper
时,您永远不会拨打电话change
来自App
道具}}。你应该像这样修改它......
const InputWrapper = React.createClass({
change () {
console.log('input changes')
this.props.onChange()
},
render () {
return (
<input onChange={this.change}/>
);
}
});
答案 1 :(得分:0)
对于遇到此问题的任何人,我发现的解释是:
您应该将onChange放在HTML元素(如span,div)上,以使气泡起作用。因为当您将它放在 InputWrapper 中时,它就像一个道具,并且因为您从未调用过this.props.onChange,所以它不起作用。
此代码应该有效
const InputWrapper = React.createClass({
change () {
console.log('input changes')
},
render () {
return (
<input onChange={this.change}/>
);
}
});
const App = React.createClass({
change () {
console.log('bubbles');
},
render () {
return (
<span onChange={this.change}>
<InputWrapper />
</span>);
}
});