2016-06-20 10 views
18

私はこのビットに固執し、私は進歩できません - 解決は簡単だと思いますが、私は理解できません。Redux - レデューサーの配列にエントリを追加する方法

state = { 
    entryId: { 
    entryName: ["something", "something2", "something3" /* and so on... */] 
    } 
}; 

これまでのところ、これは私が得る最も近いですが、代わりに新しい一意のエントリを追加することで、それが1を交換されています。内のデータがこのになりますので、私は減速にエントリを追加しようとしています既に格納されています。また、私はエントリIdは、ENTRYNAMEは、エラーを回避するために、まだ存在していない空の状態にこのアイテムを追加できるようにする必要があります。

switch(type) { 
    case ADD_ENTRY: 
    return { 
     ...state, 
     [entryId]: { 
     ...state[entryId], 
     [entryName]: { 
      [uniqueEntry]: true 
     } 
     } 
    }; 
} 

私が間違ってやっている任意のアイデアを?

+0

例にさらに文脈を書くことができますか? たとえば、イントロ減耗剤で処理しているアクションの_シェイプを指定できますか? –

+0

私は次のようなものを送ります:addEntry({entryId、entryName、uniqueEntryid}) – eloleon

+0

これを試してください:[link](https://babeljs.io/repl/#?evaluate=true&lineWrap=false&presets=es2015%2Creact%2Cstage -2%2Cstage-3&code = const%20state%20%3D%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%3A%20%5B %22something%22%2C%20%22something2%22%2C%20%22something3%22%5D%0D%0A%20%20%7D%0D%0A%7D%3B%0D%0A%0D%0Aconst%20newState %20%3D%20%7B%0D%0A%20%20%5B%22%%22%5D%3A%7B%0D%0A%20%20%20%20%5B%22%22%%5D%3A %20%5B ...状態%5B%22%%%22%5D%5B%22%%22%5D%2C%22Something4%22%5D%0D%0A%20%20%7D%0D%0A%7D%3B %0D%0A%0D%0Aconsole.log(newState)%3B&experimental = true&loose = false&spec = false) – jzm

答えて

22

あなたがやるべきことentryName配列の最後に要素を追加しようとしている場合:

const array1 = [1, 2, 3]; 
const array2 = [4, 5, 6]; 
const eight = 8; 

const newArray = ['stuff', ...array1, 'things', ...array2, ...[7, eight], 9]; 
console.log(newArray); // ["stuff", 1, 2, 3, "things", 4, 5, 6, 7, 8, 9] 

チェック:アレイと

return { 
    ...state, 
    [entryId]: { 
    ...state[entryId], 
    [entryName]: [ 
     ...state[entryId][entryName], 
     uniqueEntry 
    ] 
    } 
}; 

ES6スプレッドは、このように動作しますアウトthis gistあなたがやっていることに非常によく似た何かの例があります。

この一連の例は非常に有用です。ここで素晴らしいものがたくさん:

https://github.com/sebmarkbage/ecmascript-rest-spread

更新:

entryNameは、あなたがあなたのコメントで言うように、あなたがこれを行うことがundefinedに初期化されている場合:

return { 
    ...state, 
    [entryId]: { 
    ...state[entryId], 
    [entryName]: [ 
     ...state[entryId][entryName] || [], 
     uniqueEntry 
    ] 
    } 
}; 

私は思いますこれは、非常にネストされたデータ構造を使用してReact/reduxを使用して作業することがどれほど苦労しているかの非常に優れた例です。 FWIW、できるだけあなたの国家を平らにすることが何度も勧められました。

+0

ありがとうdannyid!私は同じことをやってみましたが、問題は最初の状態は空のオブジェクトなので、この行は...状態[entryId] [entryName]はエラーを投げます – eloleon

+0

ああ、それは重要な情報です!あなたはあなたの質問を更新できますか?答えを更新しますか? – jaybee

+0

質問を更新します。私はあなたとほぼ同じアプローチで問題を取り上げました "|" [] " – eloleon

関連する問題