データを状態配列にプッシュする際に問題があるようです。 私は、このようにそれを達成しようとしています:状態配列にプッシュする正しい方法
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
私はあなたが、戻り値が配列であることを期待推測します。
それが反応の振る舞いむしろだようだ:
SETSTATEを(呼び出して、直接this.stateを変異決して)その後 あなたが作った突然変異を交換することができます。それが 不変であるかのようにthis.stateを扱います。
私はあなたがこの(リアクトに精通していない)のようにそれを行うだろう、と思う:
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が値を持つことができる2つのケースがあり、そうではありません。それで、もしそれが既に値を持っていれば、それは完璧にうまくいっています。しかし、データなしでは、状態は '新しい値'で更新されません。どんな? – Krina
それはどんな配列でも動作するはずですが、値があるかどうかに関係なく、とにかく非構造化されます。他の場所に何か間違っているかもしれない。あなたのコードの例を示してください。 –
どういたしまして、@Gindenからの答えは、しかし、あなたのためのより便利かもしれません。 –