【发布时间】:2021-12-29 12:23:11
【问题描述】:
我刚刚发现了一个流浪的event.preventDefault(),它破坏了我的复选框的onChange 处理程序:
import { Component } from 'react';
class App extends Component {
constructor(props) {
super(props)
this.state = {
accepted: false
}
}
changeChecked = (event) => {
this.setState((state) => ({
accepted : !state.accepted
}));
event.preventDefault(); // <- this very bad
}
render() {
return (
<input
type="checkbox"
onChange={this.changeChecked}
checked={this.state.accepted}
/>
);
}
}
export default App;
产生的行为是第一次点击时正确更新的状态,但复选框仅在下一个重新呈现时更改为“已检查”外观,例如。第二次点击。
这是为什么呢?受控组件的重点不是独立于浏览器事件吗?
有人向我解释这一点肯定会减轻我花费数小时来简化我的复杂用例的痛苦。谢谢!
更新:这是一个快速的Codepen example 演示了奇怪的行为。
我包括了一个“未阻止的复选框”和一个带有阻止的onClick 事件作为比较。
请注意,当我单击 不同 复选框时,阻止 onChange 的那个将其外观切换为实际状态。
【问题讨论】:
标签: javascript reactjs dom-events preventdefault html-input