我正试图通过Reaction创建一个非常简单的"待办事项 list ".我想要编辑一项任务,只要"编辑"按钮被点击,但之后出现上述错误.根据调试过程,我发现退出减速器作用域后,"任务"变得不确定.我想知道一个国家怎么可能变得不确定.以下是我的代码:
import { useReducer, useRef } from "react";
const App = () => {
const idCreator = () => {
return Math.floor(Math.random() * 100000);
};
const reducer = (state, action) => {
switch (action.type) {
case "add": {
return [
...state,
{
task: action.task,
isEditMode: false,
isDeleteMode: false,
id: idCreator()
}
];
}
case "edit": {
const tempObj = state.forEach((item) => {
if (item.id === action.id) {
return { ...item, isEditMode: !item.isEditMode };
} else return item;
});
return tempObj;
}
default:
return state;
}
};
const [tasks, dispatch] = useReducer(reducer, []);
const task = useRef("");
return (
<>
<input
placeholder="task..."
onChange={(e) => {
task.current = e.currentTarget.value;
}}
/>
<button
onClick={() => {
dispatch({ type: "add", task: task.current });
}}
>
Add
</button>
<ul>
{tasks.map((item) => {
return (
<li key={item.id}>
<input
value={item.task}
style={{ display: item.isEditMode ? "inline-block" : "none" }}
onChange={(e) => {
item.task = e.currentTarget.value;
}}
/>
<h3
style={{ display: item.isEditMode ? "none" : "inline-block" }}
>
{item.task}
</h3>
<button
style={{ display: "inline-block" }}
onClick={() => {
dispatch({ type: "edit", id: item.id });
}}
>
Edit
</button>
<button>Delete</button>
</li>
);
})}
</ul>
</>
);
};
export default App;
任何帮助都将不胜感激.