2016-08-23 4 views
0

Я довольно новичок в области редукции и, в частности, ngrx/store. Я не мог найти пример по этой теме, и я надеюсь, что вы, ребята, можете указать мне в правильном направлении. То, что я пытаюсь достичь, - это компонент, называемый freedownloads, который отправляет действие, которое должно обновлять состояние другого компонента, называемого counter. В частности, булевское значение может загрузить. На данный момент у меня есть 2 редуктора. Должен ли я использовать combReducers? У вас есть примеры? Я использую самую последнюю версию 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; 
    } 
}