Редуктор не возвращает обновленное состояние - PullRequest
0 голосов
/ 12 февраля 2019

Я не могу заставить свой редуктор возвращать обновленное состояние.

Действие (подтверждено отладчиком) - это массив объектов - что-то вроде: [{name: "test"}, {name: "second_test"}]

Я думаю, что-то не так с моим оператором распространения, хотя я также пытался Object.assign() в отладчике, и это, кажется, возвращает ожидаемый результат.

Мои компоненты, по-видимому, просто получают состояние по умолчанию.Вот мой код редуктора.Любая помощь будет оценена.Спасибо!

const initialState = {
    current: {},
    all: []
}

export default function deckReducer(state = initialState, action) {
    switch(action.type) {
        case 'CREATE_DECK':
            return {...state, all: [...state.all, action.payload]}

        case 'FETCH_DECKS':

            debugger;
            return {...state, all: action.payload}

        default: return state
    }
}

1 Ответ

0 голосов
/ 12 февраля 2019

Недавно у меня возникла эта проблема (именно так, как вы описали), и я решил ее, используя пакет immutability-helper, который указан здесь в документации по ReactJS .

Этот подход позволяет делегировать тяжелую отмену неизменности состояния и вложенных обновлений состояния.Вы должны найти, что это решает вашу проблему:

import update from 'immutability-helper';

const initialState = {
    current: {},
    all: []
}

export default function deckReducer(state = initialState, action) {

    switch(action.type) {

        case 'CREATE_DECK': {
            /* Add payload to nested state.all list */
            return update(state, { all : { $push : [action.payload] }});
        }

        case 'FETCH_DECKS': {    
            /* Replace state.all with incoming payload */
            return update(state, { all : { $set : action.payload }});
        }

        default: return state
    }
}
...