2017-02-13 81 views
0

我想在这里把我PlayerKey组件的状态但是国家不会在一个动作的onClick更新:无法SETSTATE反应成分

class PlayerKey extends Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      activeKeys:[] 
     } 
    } 

    activateKey = (e) => { 
     this.setState({ 
      activeKeys:["2","3"] 
     }) 
    } 

    render() { 
     return (
      <div className="key" data-row-number={this.props.rowKey} data-key-number={this.props.dataKeyNumber} onClick={this.activateKey}></div> 
     ) 
    } 
} 

我已经试过控制台日志this.state在activateKey中,它给了我没有问题的组件状态(空数组),所以不知道为什么我不能更新它?

+0

你能张贴整个组件? – Shota

+1

为什么'PlayerKey'中没有定义'activateKey'? –

+0

对不起,这是我的一个错字,我已经用渲染函数和PlayerKey里面的activateKey更新了代码 –

回答

1

setState反应中的方法是异步的,并不立即反映更新的状态值。

阵营5批多个的setState()调用到用于性能单个更新。

因此,访问最近设置的状态值可能返回较旧的值。要查看状态是否真的已设置,您实际上可以在setState中将回调函数作为回调并查看更新的状态值。 React Docs

在你的情况,你可以传递一个函数作为回调如下。

activateKey = (e) => { 
    this.setState({ 
     activeKeys:["2","3"] 
    },() => { 
     console.log(this.state.activeKeys); // This is guaranteed to return the updated state. 
    }); 
} 

看到这个小提琴:JSFiddle