Redux: Действие вызывается правильно, но редуктор не обновляет состояние, просто сохраняет исходное состояние - PullRequest
1 голос
/ 12 октября 2019

Я создавал приложение, используя React, Redux, Redux-thunk. При вызове действия полезная нагрузка и тип корректно принимаются редуктором, но он не изменяет их.

  • Мой редуктор:
import EditorActionTypes from './editor.types';

const INITIAL_STATE = {
    editorModified: false,
    tabs: [
        {
            name: 'main.js',
            active: true
        },
        {
            name: 'setup.js',
            active: false
        }
    ]
};

const editorReducer = ( state = INITIAL_STATE, action ) => {
    switch (action.payload) {
        case EditorActionTypes.SELECT_TAB:
            return {
                ...state,
                tabs: [
                    ...state.tabs.map( 
                        (tab, index) => index === action.payload
                            ? tab.active = true
                            : tab.active = false
                        )
                ]
            }

        default:
            return state;
    }
};

export default editorReducer;

Ответы [ 2 ]

3 голосов
/ 12 октября 2019

Неправильное состояние переключателя, функция редуктора должна проверить действие. Type

switch (action.type) {
        case EditorActionTypes.SELECT_TAB:
            return {
1 голос
/ 12 октября 2019

Проблемная часть, я думаю, заключается в следующем:

                 ...state.tabs.map( 
                        (tab, index) => index === action.payload
                            ? tab.active = true
                            : tab.active = false
                        )

Вы ничего не возвращаете из функции внутри карты. Вместо этого вы должны вернуть объекты табуляции.

                 ...state.tabs.map( 
                        (tab, index) => ({ 
                           ...tab,
                           isActive: index === action.payload
                        }))

И, как указал @Gangadhar Gandi, вы должны включить action.type, а не action.payload

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...