2017-06-16 58 views
-1

我有这个功能工作动态变量不会为拨动

toggleDropdown = (name) => { 
    this.setState({ 
     [`open${name}`]: !this.state[`${name}`] 
    }) 
} 

我用它在多个不同的下拉

<div onClick={e=> toggleDropdown('Dropdown1')}</div> 
<div onClick={e=> toggleDropdown('Dropdown2')}</div> 

不知何故this.state.Dropdown1this.state.Dropdown2始终是真实的,当我点击的div ,它不会切换,有什么问题?

+3

你确定你的反转同场? '''打开$ {name} \']:!this.state [\'open $ {name} \']' – hmnzr

+0

请注意,'setState'是异步的,在这种情况下,最好使用这个。 setState(prevState =>({})) – hmnzr

+0

@hmnzr是的,\t 但为什么这个工作:'this.setState({openDropdown:!this.state.openDropdown})'? –

回答

0

两件事情,

  1. 当你是基于前一个设定的状态,使用prevState回拨机制setState因为setStateasynchronous

  2. 你wnat得到this.state.Dropdown1,仍然设置openDropdown1

尝试

toggleDropdown = (name) => { 
    this.setState((prevState) => ({ 
     [name]: !prevState[name] 
    })) 
} 
+0

但是为什么这样工作:'this.setState({openDropdown:!this.state .openDropdown})'?? –

+0

它有时会起作用,而不是其他时间,取决于它的处理速度。上面的代码不一致,所以建议使用setState的回调方法 –