从减速机中的商店中读取状态

时间:2018-06-12 21:34:26

标签: javascript reactjs redux

我正在使用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;
}
}

2 个答案:

答案 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 ; 它现在正在工作