2017-09-12 12 views
-2
case SET_WINE_ITEMS: 
    const { index, name, value } = action.payload 
    const items = state.items 
    items[index][name] = value 
    return { ...state, items } 

拡散演算子を使用して上記のコードを実装する簡潔な方法はありますか?配列内のオブジェクトの1つのフィールドを変更するスプレッド演算子ES6

+1

ない答えが、ちょうどフィードバック。 'items [index] [name] = value'では、還元状態を変更しています。それはお勧めできません。最初に配列 'const item = [... state.items]'をコピーしたいと思います。それから、 'items [index] [name] = value';で変わるのはいいでしょう。 – jonahe

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator – Gopinath

+0

オブジェクトの構造に関する詳細情報が必要です –

答えて

0

ご意見ありがとうございます。私のオブジェクト配列の構造は以下の通りです。items配列には多くのオブジェクトがあります。

items: [{ 
    name: '', 
    code: '', 
    quantity: '', 
    netBottlePrice: '', 
    netCasePrice: '', 
    caseSize: '', 
    volume: '', 
    volumeUnit: '', 
    amount: '' 
}] 

Iは、拡散演算子を使用して、それを変異させずにReduxの状態の更新を達成する方法を見つけた:

case SET_WINE_ITEMS: 
    const { index, name, value } = action.payload 
    const item = { ...state.items[index], [name]: value } 
    const items = [...state.items.slice(0, index), item, ...state.items.slice(index +1) ] 
    return { ...state, items } 
関連する問題