【问题标题】:Redux reducer error - assign MUST be an objectRedux reducer 错误 - 分配必须是一个对象
【发布时间】:2018-02-09 09:31:25
【问题描述】:

我的 reducer return 语句中出现以下错误。

在这种环境中,assign 的来源必须是一个对象。此错误是性能优化,不符合规范。

export function setCredentials(state = {}, action) {
    switch (action.type) {
        case "SET_YEAR":
            return { ...state, ...action.setYear };
        case "SET_STUDENT":
            return { ...state, ...action.setStudent };
        case "SET_GROUP":
            return { ...state, ...action.setGroup };
        default:
            return state;
    }
}

动作创建者:

export const setYear = int => ({
    type: "SET_YEAR",
    setYear: int
});

export const setGroup = int => ({
    type: "SET_GROUP",
    setGroup: int
});

export const setStudent = int => ({
    type: "SET_STUDENT",
    setStudent: int
});

我正在尝试创建以下状态:

{
      setCredentials: {
                 setYear: 20,
                 setStudent:10,
                 setGroup: 10
      }
}

有什么想法吗?

reducer/index.js

import { combineReducers } from "redux";
import {
    setCredentials,
    fetchCategories,
    eventsForMonth,
    fetchEvents
} from "./events";

import { hasErrored, isLoading } from "./loader";

import navigationReducer from "./navigationReducer";
const rootReducer = combineReducers({
    fetchEvents,
    navigationReducer,
    hasErrored,
    eventsForMonth,
    isLoading,
    fetchCategories,
    setCredentials
});

export default rootReducer;

商店:

import rootReducer from "../reducers";

const initialState = {
    hasErrored: false,
    isLoading: true,
    fetchEvents: {},
    fetchCategories: [],
    setCredentials: {}
};

const reduxLogger = createLogger();

const store = createStore(
    rootReducer,
    initialState,
    applyMiddleware(thunk, reduxLogger)
);

export default store;

【问题讨论】:

  • this 可能会帮助你。你如何将这个减速器传递给存储?你用combineReducers吗?你能把这部分代码也展示一下吗?
  • 更新了问题,我返回了一个我不明白问题的对象。

标签: javascript reactjs react-redux


【解决方案1】:

在你的 reducer 中,你试图解构值,而不是对象。看到这个提议的改变你就会明白了:

export function setCredentials(state = {}, action) {
    switch (action.type) {
        case "SET_YEAR":
            return { ...state, setYear: action.setYear };
        case "SET_STUDENT":
            return { ...state, setStudent: action.setStudent };
        case "SET_GROUP":
            return { ...state, setGroup: action.setGroup };
        default:
            return state;
    }
}

【讨论】:

    猜你喜欢
    • 2020-12-28
    • 2023-03-14
    • 2018-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多