我正在使用react和redux构建一个简单的聊天应用程序。我想仅操作reducer中状态中的messages对象,但是我收到错误:TypeError: Cannot read property 'getState' of undefined
这是减速器:
import { getMessages } from "../static_data";
import { SEND_MESSAGE } from "../actions/constants/action_types";
import _ from 'lodash';
import store from '../store';
const { messages } = store.getState();
export default function message(state = messages, action) {
switch (action.type) {
case SEND_MESSAGE:
const { message, userId } = action.payload;
const allUserMsgs = state[userId];
const number = +_.keys(allUserMsgs).pop();
return {
...state,
[userId]: {
...allUserMsgs,
[number]: {
number,
text: message,
is_user_msg: true
}
}
};
default:
return state;
}
}
答案 0 :(得分:0)
您的商店设置和/或根缩减器文件几乎肯定会导入此切片缩减器文件,因此您将创建循环导入问题。这意味着store.js
文件在初始化此模块时尚未完成构建,因此store
未定义。
此外,您的reducer逻辑不应尝试访问商店实例。相反,它应仅根据其(state, action)
参数确定新状态。
此外,此切片缩减器应定义其自己的初始状态值,例如:
const initialState = {};
export default function message(state = initialState, action) {
// logic here
}
答案 1 :(得分:0)
这个数字的增量只是一个错误。
我改变了这个const number = +_.keys(allUserMsgs).pop();
致const number = _.keys(allUserMsgs).pop() + 1 ;
它现在正在工作