react redux 工具包无法为 addtoprogress 编写逻辑

问题描述 投票:0回答:0

我很难获得 handson redux 工具包 我在这里尝试将任务从待办事项转移到进行中 addtodo 工作正常但 addprogress 不工作 有人可以帮我吗?我是新手

商店.js

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

import counterReducer from "./features/counter/counterSlice";
import todoReducer from "./features/todo/todosSlice";
import progressReducer from './features/inProgress/inProgressSlice'
const store = configureStore({
  reducer: {
    // counter: counterReducer,
    todos: todoReducer,
    progress :progressReducer
  },
});

export default store;

todo.js 中的按钮

<button
  onClick={() => {
       dispatch(addProgress(todo.id))
      }}
     >

在 todo.js 中,我有一个 id,我将其作为有效负载传递

progress.js

import React from "react";
import { useSelector } from "react-redux";

const InProgress = () => {
  const progress = useSelector((state) => state.progress);
  if (!progress) {
    console.log("Loading");
  }
console.log(progress.length);

  return (
    <div>
      <div>
        <h2>In Progress</h2>
        <ul>
          {progress.map((item) => (
            <li key={item.id}>{item.text}</li>
          ))}
        </ul>
      </div>
    </div>
  );
};

export default InProgress;

progressslice.js

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

const progressSlice = createSlice({
  name: "progress",
  initialState: [],
  reducers: {
    addProgress: (state, action) => {
      const todoIndex = state.findIndex((todo) => todo.id === action.payload);
      console.log(todoIndex);
      if (todoIndex !== -1) {
        const todo = state[todoIndex];
        const newState = [
          ...state.slice(0, todoIndex),
          ...state.slice(todoIndex + 1),
          todo,
        ];
        console.log("Current State: ", state);
        console.log("New State: ", newState);
        return newState;
      }
    },
  },
});

export const { addProgress } = progressSlice.actions;
export default progressSlice.reducer;

这里,如果 id 与状态 id 匹配,我需要将其添加到进度状态中,以及之前无法实现的状态

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

const todosSlice = createSlice({
  name: "todos",
  initialState: [
  ],
  reducers: {
    addTodo: (state, action) => {
      state.push({
        id:111,
        text: action.payload,
      });
    },
    toggleTodo: (state, action) => {
      const todo = state.find((todo) => todo.id === action.payload);
      if (todo) {
        todo.completed = !todo.completed;
      }
    },
  },
});

export const { addTodo, toggleTodo } = todosSlice.actions;
export default todosSlice.reducer;

todoslice.js 工作正常

javascript reactjs react-redux redux-toolkit redux-thunk
© www.soinside.com 2019 - 2024. All rights reserved.