2015-12-21 30 views
1

海我得到麻煩時,我嘗試這樣的,我想SETSTATE至創紀錄內鍵入 例子:如何SETSTATE關鍵在創紀錄的內部反應

constructor(props){ 
    super(props); 
    this.state = { 
     data:{"firstName":"XXXXX",lastName:"YYYYY",Rank:1} 
    } 
} 

我在最初的聲明本狀態,在這裏,我想改變像只排名特別關鍵,爲此,我寫的是這樣的:

this.Setstate({data.Rank:2})

它給出了一個錯誤 任何人給我建議,就如何解決它,任何幫助非常感謝

+0

有什麼錯誤? 'this.Setstate'應該是'this.setState' – Venugopal

+0

意外的令牌({data.Rank:2}) –

+0

作爲樹莓提到的,請檢查您是否在'getInitialState'中設置了'數據' – Venugopal

回答

2

請通過這個答案https://stackoverflow.com/a/34384198/3563619

必須擴展this.statenewState,更改在newState和和然後setState(newState)

newState = Object.assign({}, this.state); // clone this.state in a new object newState 
newState.data.Rank = 2;      // make changes to newState 
this.setState(newState);      // setState() 

可以使任何類型和任何數量的修改newState,然後都使用setState()而不必在你爲d什麼有任何疑問卷板機。

+0

即ie我需要聲明一個虛擬記錄並將該記錄設置爲最初分配的記錄? –

+0

是的。這是最安全的方法,你可以繼續對你的假人進行修改而不用擔心「this.state」的不可變性。 –

+0

除此之外,有沒有其他方法? –

1

您正在設置狀態不正確。

如果你有一個組件:

React.createClass({ 
    getInitialState: function(){ 
    return { 
     data: {"firstName":"XXXXX",lastName:"YYYYY",Rank:1} 
    }; 
    } 
}); 

你需要做的:

var data = this.state.data; 
data.Rank = 2; 

this.setState({ 
    data: data 
}); 
+0

他想修改'this.state.data.Rank'。上面的答案改變了'this.state.rank'。請修改。 –

+0

如果最初的'state'格式爲'return {'data':data};',那麼'this.setState({data.Rank:2})'應該工作,我想改變特定的鍵 –

+0

。 – Venugopal