2017-02-13 75 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