【问题标题】:cannot toggle checkbox using Redux dispatch无法使用 Redux 调度切换复选框
【发布时间】:2021-11-15 06:37:35
【问题描述】:

我想签入我已完成的按钮,但通过将操作从我的 todoSlice.js 分派到我的 TodoItem.js。但是,当我单击复选框时,没有任何反应,控制台中没有错误,redux 控制台中也没有任何更新......请帮助我找出问题所在!非常感谢!

tod​​oSlice.js:

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

const todoSlice = createSlice({
    name: "todo",
    initialState: [{
        id: 1,
        title: "todo1",
        completed: false,
    }, {
        id: 2,
        title: "todo2",
        completed: false,
    }, {
        id: 3,
        title: "todo3",
        completed: true,
    }, ],
    reducers: {
        addTodo: (state, action) => {
            const newTodo = {
                id: Date.now(),
                title: action.payload.title,
                completed: false,
            };
            state.push(newTodo);
        },
        toggleComplete: (state, action) => {
            const index = state.findIndex(
                (todo) => todo.id === action.payload.id
            )
            state[index].completed = action.payload.completed
        }
    },
});
export const {
    addTodo,
    toggleComplete,
} = todoSlice.actions;
export default todoSlice.reducer;

TodoItem.js:

import React from "react";
import { useDispatch } from "react-redux";
import { toggleComplete } from "../redux/todoSlice";

const TodoItem = ({ id, title, completed }) => {
  const dispatch = useDispatch();

  const handleCompleteClick = () => {
    console.log("helllo");
    dispatch(
      toggleComplete({
        id: id,
        completed: !completed,
      })
    );
  };
  return (
    <li className={`list-group-item ${completed && "list-group-item-success"}`}>
      <div className="d-flex justify-content-between">
        <span className="d-flex align-items-center">
          <input type="checkbox" className="mr-3" checked={completed} /> {title}{" "}
        </span>{" "}
        <button className="btn btn-danger"> Delete </button>{" "}
      </div>{" "}
    </li>
  );
};

export default TodoItem;

【问题讨论】:

  • handleCompleteClick 已声明但未使用。

标签: reactjs action dispatch


【解决方案1】:

尝试像这样将 onClick 处理程序添加到按钮:

<button className="btn btn-danger" onClick={handleCompleteClick}> Delete </button>{" "}

【讨论】:

  • 我试过了,但是没用...
  • 在这种情况下控制台是空的?或者你看到“你好”?如果是,请展示您是如何创建商店并将其添加到应用程序的。
  • 我没有看到“你好”
  • 你是什么意思“然后展示你是如何创建和添加商店到应用程序”?
猜你喜欢
  • 2016-07-17
  • 2015-02-05
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
相关资源
最近更新 更多