如何使用Redux工具包从处于Redux状态的数组中删除单个元素

时间:2020-10-04 13:38:55

标签: redux redux-toolkit

我正在使用redux-toolkit库中的createSlice()函数在数组中添加和删除项目。

addProject reducer函数工作正常,但removeRpoject不起作用。

// projects.js

import { createSlice } from "@reduxjs/toolkit";

let lastId = 0;

const slice = createSlice({
  name: "projects",
  initialState: [],
  reducers: {
    projectAdded: (projects, action) => {
      projects.push({
        id: ++lastId,
        name: action.payload.name,
      });
    },
    projectRemoved: (projects, action) =>
      (projects = projects.filter((pro) => pro.id !== action.payload.id)),
  },
});
export const { projectAdded, projectRemoved } = slice.actions;
export default slice.reducer;

// store.js

import { configureStore } from "@reduxjs/toolkit";
import reducer from "./projects";
const store = configureStore({ reducer: reducer });

export default store;

// index.js

import store from "./store/store";
import { projectAdded, projectRemoved } from "./store/projects";
const unsubscribe = store.subscribe(() => {
  console.log("store Changed", store.getState());
});
store.dispatch(projectAdded({ name: "Project 1" }));
store.dispatch(projectRemoved({ id: 1 }));

1 个答案:

答案 0 :(得分:2)

您要替换状态(projects)的根对象-这将终止immer更改检测。

最简单的方法是只返回过滤后的数组,而不先将其分配给草稿对象:

projectRemoved: (projects, action) => projects.filter((pro) => pro.id !== action.payload.id),

另请参阅: https://immerjs.github.io/immer/docs/update-patterns#array-mutations

相关问题