【发布时间】:2021-11-15 06:37:35
【问题描述】:
我想签入我已完成的按钮,但通过将操作从我的 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;
【问题讨论】:
-
handleCompleteClick已声明但未使用。