【发布时间】:2017-06-16 09:57:13
【问题描述】:
我有这个功能
toggleDropdown = (name) => {
this.setState({
[`open${name}`]: !this.state[`${name}`]
})
}
我在多个不同的下拉菜单中使用它
<div onClick={e=> toggleDropdown('Dropdown1')}</div>
<div onClick={e=> toggleDropdown('Dropdown2')}</div>
不知何故this.state.Dropdown1 或this.state.Dropdown2 在我单击div 时总是正确的,它不会切换,这是什么问题?
【问题讨论】:
-
您确定要反转同一个字段吗?
[`open${name}`]: !this.state[`open${name}`] -
请注意,
setState是异步的,在您的情况下,最好使用 this.setState(prevState => ({ })) -
@hmnzr 是的,但为什么会这样:
this.setState({openDropdown: !this.state.openDropdown})? -
因为异步意味着它不保证任何顺序,所以如果处理速度慢,或者单个更新周期内多个
setState会导致意外结果
标签: javascript reactjs ecmascript-6