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

如何使用redux工具箱从处于redux状态的数组中删除单个元素,redux,redux-toolkit,Redux,Redux Toolkit,我使用redux toolkit库中的createSlice()函数在数组中添加和删除项 addProject reducer函数工作正常,但removepoject不工作 //projects.js import { createSlice } from "@reduxjs/toolkit"; let lastId = 0; const slice = createSlice({ name: "projects", initialState:

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

addProject reducer函数工作正常,但removepoject不工作

//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 }));


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

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

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

另见:

非常感谢