私の状態は次のようになります場合:Reduxディープコピーアレイが変更されない場合でも
const initialState = {
color: 'blue',
sizes: ['S', 'M', 'L'],
}
そして、私は色を変更したい、私の減速は、この権利を返す必要があります:
return { ...state, color: newColor };
しかし、状態はまだ古い配列を参照しませんが?配列を変更していなくても、これは突然変異とみなされますか?これは良いでしょうか?
return {
...state,
color: newColor,
sizes: state.map.sizes(size => size)
}
配列にオブジェクトが含まれている場合はどうなりますか?
const initialState = {
color: 'blue',
sizes: [
{ color: 'red', size: 'S' },
{ color: 'green', size: 'M' },
{ color: 'blue', size: 'L' }
],
}
これは、状態の変異を避けるためにこれを行う必要があるということですか?
return {
...state,
color: newColor,
sizes: state.map.sizes(item => { ...item })
}
また、Object.assignと拡散演算子はJSON.stringifyとJSON.parseをやっよりも好まれる理由はありますか?
これは私がしばらくして実現したものです。古い状態と新しい状態の両方が同じ配列を参照するかどうかは問題ではありません。変更しなかったからです。私はまだ平等チェックを実行し、必要に応じて前の状態に戻ることができます。 – epiqueras
@epiquerasだからこそ、それは素晴らしい練習です。何かをコピーして変更しないように規律を高めれば、素早く簡単にアイデンティティをチェックできます。もちろん、さまざまな味のライブラリ(ImmutableJSやさまざまなFPレンズライブラリ)がありますが、あなた自身であれ、熱心なチームであれば、この方法でバニラJSオブジェクトを使用することはできません。特に将来の投機的なオブジェクトの休憩/スプレッドパターン。 – Norguard
はい、私は複雑な配列とネストされたプロパティの変更を扱うとき、これが痛みになることを完全に見ることができます。私はちょうどそれらのライブラリのいくつかをチェックアウトし、私はこれまでより複雑な操作を行う必要がある場合は、間違いなくそれらを使用します。私はまた、減速機を構成し、それを避けるために可能な限り平らな状態を保つようにしています。 – epiqueras