将索引对象添加到 Redux 存储(Redux Toolkit)的最佳方法是啥?

Posted

技术标签:

【中文标题】将索引对象添加到 Redux 存储(Redux Toolkit)的最佳方法是啥?【英文标题】:What's the best way to add an indexed object to a Redux store (Redux Toolkit)?将索引对象添加到 Redux 存储(Redux Toolkit)的最佳方法是什么? 【发布时间】:2021-04-02 04:45:47 【问题描述】:

到目前为止,我一直将所有内容存储在数组中,但是在遇到this StachOverflow question about keyed object indexes 以及遍历数组如何导致性能损失之后,我想转向将内容存储为对象。但是我不太明白语法。

这个 reducer 是用来创建索引对象的,但它似乎不起作用。 如何修复它以生成以下所需的对象形状?


type MsgPayload = 
  type: string;
  msgKey?: string;
  index?: number;
;

type IndexedMsgPayload = 
  [key: number]: MsgPayload;
;

const messengerSlice = createSlice(
  name: "messages",
  initialState,
  reducers: 
    emitMessage: (state, action: PayloadAction<MsgPayload | any>) => 
      state.total++;
      const indexedObj: IndexedMsgPayload = 
        0: 
          ...action.payload,
        ,
      ;
      action.payload[state.total] = indexedObj[0];
      state.messages =  ...state.messages, ...action.payload[state.total] ;
    ,
  ,
);

我想实现这样的目标:


   1:  
    type: 'type',
    msgKey: 'alert'
  ,

【问题讨论】:

【参考方案1】:

Redux Toolkit 已经有一个 createEntityAdapter API 可以为您定义和更新规范化的状态结构:

https://redux-toolkit.js.org/api/createEntityAdapter https://redux.js.org/tutorials/fundamentals/part-8-modern-redux#normalizing-state https://redux.js.org/tutorials/essentials/part-6-performance-normalization#normalizing-data

【讨论】:

太好了,我想这正是我想要的。谢谢

以上是关于将索引对象添加到 Redux 存储(Redux Toolkit)的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

防止将重复的对象添加到 state react redux

将数组从 redux 存储导入到表中。反应,js

在 Redux 中存储 websocket(通道)连接对象

如何将堆栈跟踪添加到我当前的 Redux Devtools 设置中?

将 Redux 添加到 React-Native 应用程序?

模拟 API 调用时未填充 Redux 存储