为了try 和理解Redux,我设置了一个简单的TODO项目.不幸的是,我无法让useDispatch
人go 工作.
我可以获得我用useSelect
存储的所有待办事项,但我不能添加一个待办事项,因为我认为useDispatch
会导致错误.
错误显示:"e.preventDefault()
不是一个函数",但当我删除useDispatch
时,它不会显示此错误,因此我认为错误来自useDispatch
.
以下是切面:
import { createSlice } from "@reduxjs/toolkit";
const slice = createSlice({
name: "list",
initialState: {
value: [
{
id: 0,
label: "Boodschappen",
},
{
id: 1,
label: "Scheren",
},
{
id: 2,
label: "Stoep vegen",
},
],
},
reducers: {
addTodo: (state, action) => {
state.list = action.payload;
},
},
});
export const { addTodo } = slice.actions;
export default slice.reducer;
以下是表单组件:
import { useDispatch, useSelector } from "react-redux";
import { addTodo } from "../../slices/todoSlice";
function Form() {
const list = useSelector((state) => state.list.value);
const [todo, setTodo] = useState("");
const dispatch = useDispatch();
const addTodo = (e, addTodo) => {
e.preventDefault();
dispatch(addTodo([...list, { id: list.length + 1, label: todo }]));
setTodo("");
};
return (
<div>
<FormWrapper>
<form action="" onSubmit={(e) => addTodo(e, addTodo)}>
<input
type="text"
name="todo"
id="todo"
value={todo}
onChange={(e) => setTodo(e.target.value)}
/>
<input type="submit" value="Add todo" />
</form>
</FormWrapper>
</div>
);
}
这就是我准备好的store .我确实把它包在了我的应用程序组件上:
import { configureStore } from "@reduxjs/toolkit";
import listReducer from "../slices/todoSlice";
// config the store
const store = configureStore({
reducer: {
list: listReducer,
},
});
// export default the store
export default store;