reactjs - 无法使用 Redux 调度切换复选框
问题描述
我想签入我已完成的按钮,但通过将操作从我的 todoSlice.js 分派到我的 TodoItem.js。但是,当我单击复选框时,没有任何反应,控制台中没有错误,redux 控制台中也没有任何更新......请帮助我找出问题所在!太感谢了!
todoSlice.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;
解决方案
尝试将 onClick 处理程序添加到按钮,如下所示:
<button className="btn btn-danger" onClick={handleCompleteClick}> Delete </button>{" "}
推荐阅读
- python - 如何裁剪使用 mobilenetv2-yolov3 检测到的图像?
- jsp - 在 HTML 注释中描述 jsp:setProperty 操作标记时出现内部服务器错误
- windows - 无法使用 ansible 查询 postgres
- lua - ZeroBrane Studio 运行时错误,带有选项卡右键单击菜单“另存为...”
- kotlin - 为什么我会得到与字符串和 Kotlin 值类不匹配的类型?
- python - Telethon 没有获得所有用户,只有约 90% 的用户从公共组中提取
- python - 显示特定单词时在新列中附加值
- javascript - 一个 Electron 应用程序可以检测到另一个应用程序并可能向它发送消息吗?
- reactjs - CORS 错误,但 springboot 应用程序具有跨源注释
- kotlin - 如何解决 Kotlin 中的 EasyMock anyString() NullPointerException?