reactjs - 如何在reducer中没有任何id的情况下将数据添加到redux状态数组?

标签 reactjs redux react-redux

我有这个 reducer :

import { GET_CHAT, ADD_MESSAGE } from '../actions';

export default function (state = null, action) {
switch (action.type) {
    case GET_CHAT:
        return { ...state, [action.meta.id]: action.payload.data };
    case ADD_MESSAGE:
        console.log(state[action.meta.convId].chat.messages)
        return {
            ...state,
            [action.meta.convId]: {
                ...state[action.meta.convId],
                chat: {
                    ...state[action.meta.convId].chat,
                    messages: {
                        ...state[action.meta.convId].chat.messages,
                        action.payload
                    }
                }
            }
        };
    default:
        return state;
}
}

我想将 action.payload 添加到消息数组的末尾。问题是:当我尝试将 key 放入有效负载时,如下所示:

[action.meta._id]:action.payload

Messages 不再是一个数组,而是一个对象。所以我不能再用map()循环它了。而且 redux 不会让我将有效负载直接推送到数组,看来我必须放一个键...... 任何帮助将不胜感激,谢谢:)

最佳答案

如果您希望消息始终是一个数组,那么您的 reducer 应该如下所示:

import { GET_CHAT, ADD_MESSAGE } from '../actions';

export default function (state = null, action) {
  switch (action.type) {
    case GET_CHAT:
       return { ...state, [action.meta.id]: action.payload.data };
    case ADD_MESSAGE:
        console.log(state[action.meta.convId].chat.messages)
        return {
           ...state,
           [action.meta.convId]: {
               ...state[action.meta.convId],
               chat: {
                  ...state[action.meta.convId].chat,
                  messages: [                                //USE SQUARE BRACKETS INSTEAD
                    ...state[action.meta.convId].chat.messages,
                    action.payload
                  ]
               }
          }
        };
    default:
      return state;
    }
}

关于reactjs - 如何在reducer中没有任何id的情况下将数据添加到redux状态数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46036967/

相关文章:

javascript - 如何删除 redux reducer 中的购物车项目?

android - React Native - 共享方法取消事件

javascript - 如何将焦点设置为在循环中动态创建的渲染 redux 表单

reactjs - Jest/ enzyme 单元测试 : How to pass store to shallow component that uses redux 4 and react-redux 6 connect function

css - Material-UI根据断点改变IMG

reactjs - 类型错误 : this is undefined?

javascript - 如何使用express/node.js通过互联网请求React应用程序

reactjs - 存储数据时出错,{}- Redux Persist

javascript - ReactJS - 获取调度结果的正确方法

javascript - React - 过滤商店中的对象会导致递归/无限循环