2016-08-23 4 views
0

私はかなり還元しており、特にngrx/storeは新しくなっています。私はこの話題についての例を見つけることができず、皆さんが私に正しい方向を向けることを願っています。 私が達成しようとしているのは、freedownloadsというコンポーネントで、counterという別のコンポーネントの状態を更新するアクションをディスパッチします。特にブール値canDownload。現時点で私は2つの減速機を持っています。 combineReducersを使うべきですか?例はありますか? 最新バージョンのngrx/store(2.1.2)を使用していますngrx/store依存型レデューサーを作成するには

ありがとうございました!私はあなたの質問を理解すると仮定すると、

//counter.ts 
... 
export const counter = (state: CounterState = initialState, action: Action) => { 
    switch (action.type) { 
    case DECREMENT: 
     let isZero:boolean = (state.counter - 1) > 0; 
     return Object.assign({}, state, { 
     counter: state.counter - 1, 
     canDownload: isZero 
     }); 
    case INCREMENT: 
     return Object.assign({}, state, { 
     counter: state.counter + 3, 
     canDownload: true 
     }); 

    default: 
     return state; 
    } 
} 


//freedownloads.ts 
... 
export const freedownloads = (state: boolean = false, action: Action) => { 

    switch (action.type) { 
    case ENABLE: 
     return true; 
    case DISABLE: 
     return false; 
    default: 
     return state; 
    } 
} 

答えて

1

ngrxがprovideStoreに登録されているすべての減速の組み合わせで唯一の店舗を持っているので...

あなたの行動は減速間で共有されなければなりません。両方のレデューサーでそのアクション名を確認し、そこにある各状態スライスに必要なロジックを実行します。これは、アクションがスイッチの大文字と小文字の値に一致しないときに状態が渡されたときに、各減速機をデフォルトとして戻す必要があるためです。

だから、あなたのコードはこのようなものにする必要があると思います。

export const counter = (state: CounterState = initialState, action: Action) => { 
    switch (action.type) { 
    case DECREMENT: 
     let isZero:boolean = (state.counter - 1) > 0; 
     return Object.assign({}, state, { 
     counter: state.counter - 1, 
     canDownload: isZero 
     }); 
    case ENABLE: 
     return Object.assign({}, state, { 
     canDownload: true 
     }); 
    case INCREMENT: 
     return Object.assign({}, state, { 
    counter: state.counter + 3, 
    canDownload: true 
    }); 

default: 
    return state; 
    } 
} 
関連する問題