2017-03-28 26 views
1

私は生徒のリストを持っており、私のアプリは常にその時に1人の生徒、activePupilを表示しています。私はこれまで2つの減速機を持っています。一つは含まれており、デフォルトで(配列の形で)すべての子のリストを返します。 別の減速機から減速機にアクセスしますか?

[ 
{ 
    id: 1 
    name: Barack 
}, 
{ 
    id: 2 
    name: Donald 
} 
] 

...その後、私は見ている現在の瞳が含まれているactivePupilReducerを、持っています。だから

{ 
    id: 2 
    name: Donald 
} 

今、私は次の生徒に反復する方法がわかりません。アクション "UPDATE_ACTIVE"が送出されるとき、私はactivePupilReducerに、アクティブな生徒を次の生徒に更新させたい。だから私は自分の生徒の現在のIDをつかみ、それを反復して、もう一方の減速機の右のIDで学生をつかむ必要があります(または、それは私がやらなければならないと思います)。今、私のactivePupilReducerは次のようになります。

export default function (state={id: -1, name:"John"}, action) { 
    switch (action.type) { 
     case "UPDATE_ACTIVE": 
     // ?? 
     default: 
     return state; 
    } 
} 

私は何とか他の減速をつかむと、次の要素をつかむ必要があるだろうが、私はこれについて行くだろうか見当がつかない。

答えて

1

私が思うに、活発な瞳孔と生徒のリストは、本質的に同じレデューサーの中に住むべきです。したがって、例えば、状態が物体である瞳孔減弱器を有するだけである。それから、あなたが現在しているように行動してください。

また、還元剤はあらゆる副作用から純粋なものであることを意味しているため、あなたが探しているものを行う場所ではありません。あなたができることは、あなたの減量/行動の外の次の生徒を計算することです。例えば、いくつかのコンポーネントのボタンをクリックし、それをあなたのupdate_activeアクションに渡すと、あなたのレデューサーにそれが渡され、アクティブな生徒として設定されます。

+0

私はあなたを正しく理解していれば、私は完全に間違ったトラックにあり、減速機でこの機能を実装しようとしていますか?面白いですが、私は現在私の行動でそれを持っているので、私はそこに反パターンを実装していると思っていました。 –

0

activePupilReducerの有効範囲が十分ではありません。 activePupilキーとpupilsアレイの両方が動作することがわかります。

combineReducersを使用している場合は、お互いの状態にアクセスできない可能性があります。あなたは一つにこれら二つの減速をマージし、次の状態の構造を使用する必要があります。

{ 
    pupils: [...] 
    activePupil: {...} 
} 

あなたがUPDATE_ACTIVEアクションを起動すると、この単一減速機は、両方のキーへのアクセス権を持っているし、状態変異を実行することができます。

+0

私はリデューサーを組み合わせて使用​​していますので、結局、私の店はあなたが引用している店のように見えます。私は両方のデータにアクセスする必要があるので、あなたが正しく理解すれば、私の複合レデューサーでこの機能を実装するだけですか? –

+0

あなたのレデューサーは**両方の**エントリにアクセスする必要があります。両方の**を同じキーの下に置く必要があるため、同じレデューサーからアクセスできます。したがって、 'store = {data:{pupils、activePupil}}' – slezica

関連する問題