我似乎有問題推送數據到狀態數組。 我想實現這樣說:正確的方式推入狀態陣列
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信這是不正確的方法和出現問題的原因可變性?
我似乎有問題推送數據到狀態數組。 我想實現這樣說:正確的方式推入狀態陣列
this.setState({ myArray: this.state.myArray.push('new value') })
但我相信這是不正確的方法和出現問題的原因可變性?
this.state.myArray.push('new value')
返回而非陣列本身擴展陣列的長度,。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push
我猜你所期望的返回值是數組。
看來這是相當陣營的行爲:
從來沒有直接發生變異this.state,如調用的setState()之後可能 代替您作出的突變。對待這個狀態,就好像它是不可變的 。
我猜,你會做這樣的(不熟悉的反應):
var joined = this.state.myArray.concat('new value');
this.setState({ myArray: joined })
您可以使用.concat
方法來創建你的數組新數據的副本:
this.setState({ myArray: this.state.myArray.concat('new value') })
但是,當傳遞數組時,要小心.concat
方法的特殊行爲 - [1, 2].concat(['foo', 3], 'bar')
將導致[1, 2, 'foo', 3, 'bar']
。
你根本不應該操作狀態。至少,不直接。如果你想更新你的數組,你會想要做這樣的事情。
var newStateArray = this.state.myArray.slice();
newStateArray.push('new value');
this.setState(myArray: newStateArray);
直接處理狀態對象並不可取。你也可以看看React的不變性助手。
使用ES6它可以這樣做:
this.setState({ myArray: [...this.state.myArray, 'new value'] }) //simple value
this.setState({ myArray: [...this.state.myArray, ...[1,2,3] ] }) //another array
我做了同樣的事情,有兩種情況myArray可以有值,它不會。所以,如果它已經有了價值,那麼它的效果就很好。但在沒有數據..它不更新狀態'新值'。任何soln? – Krina
它應該適用於任何數組,不管它是否具有值,它都會被解構。也許在其他地方有什麼問題。您能否展示一下您的代碼示例? –
不客氣,從@Ginden答案可能是你更方便,雖然。 –