我使用Material UI代替React。
我在标签中有一个复选框:
const Layout = () => (
<Tabs value='a' onChange={e => console.log(e)}>
<Tab label='a' value='a'>
<Checkbox />
</Tab>
</Tabs>
);
当我点击复选框Tabs
&#39; onChange
事件被触发。这是故意的行为吗?有没有办法避免这种情况?
答案 0 :(得分:0)
这似乎不是故意行为。我能够检查并取消选中Checkbox,而不使用以下代码触发Tab的onChange:
handleChangeCapture(e) {
e.stopPropagation();
}
checkUncheck(e) {
console.log('change')
this.setState({
isChecked: !this.state.isChecked
});
}
render() {
return (
<MuiThemeProvider muiTheme={muiTheme}>
<Tabs value='a' onChange={ e => console.log(e) }>
<Tab label='a' value='a'>
<div onChangeCapture={this.handleChangeCapture}>
<Checkbox onClick={this.checkUncheck} checked={this.state.isChecked}/>
</div>
</Tab>
</Tabs>
</MuiThemeProvider>
);
}
当然,我将isChecked: false
添加到状态并放入构造函数this.checkUncheck = this.checkUncheck.bind(this);
。在父div上使用onChangeCapture
并停止传播事件(使用stopPropagation
)基本上就是我所做的。 This answer explains how onClickCapture works。我没有在documentation中明确找到onChangeCapture,但似乎也有类似的效果。