reactjs - 如何更改对象上按钮的状态?
问题描述
我尝试更改按钮上的值。基本上,当我单击按钮验证时,任务转到我的列“tâcheà faire”,按钮是“en cours”。
当我单击此按钮时,我希望我的任务(使用我的 const “switchencours”)切换到“terminé”的“encours”并移动到“tâches terminées”列
目前,当我点击按钮时,没有任何动静,我的价值“etat”没有改变。
有人可以帮我吗?
function Task() {
const [task, setTask] = useState({ task: "", etat: "en cours" });
const [todoList, setTodoList] = useState([]);
const switchEnCours = () => {
setTask({ ...task, etat: "terminé" });
};
const switchTerminé = () => {
setTask({ ...task, etat: "supprimée" });
setTodoList([...todoList, task]);
};
const handleInput = (e) => {
setTask({ ...task, task: e.target.value });
};
const AddTask = () => {
setTodoList([...todoList, task]);
console.log(todoList);
};
useEffect(() => console.log(todoList), [todoList]);
return (
<div>
<input onChange={handleInput}></input>
<button onClick={AddTask}>Valider</button>
<div className="DivColonne">
<div className="Colonne">
<h1>Tâche à faire</h1>
{todoList.map((insertTask, index) => {
if (insertTask.etat === "en cours") {
return (
<div>
<p>{insertTask.task}</p>
<button onClick={switchEnCours}>{insertTask.etat}</button>
</div>
);
} else {
return <div></div>;
}
})}
</div>
<div className="Colonne">
<h1>Tâche en cours</h1>
<div>
{todoList.map((insert) => {
if (insert.etat === "terminé") {
return (
<div>
<p>{insert.task}</p>
<button onClick={switchTerminé}>{insert.etat}</button>
</div>
);
}
})}
</div>
</div>
<div>
<h1>Tâches terminées</h1>
<div>
{todoList.map((done) => {
if (done.etat === "supprimé") {
return (
<div>
<p>{done.task}</p>
<p>{done.etat}</p>
</div>
);
}
})}
</div>
</div>
</div>
</div>
);
}
export default Task;
解决方案
您的switchEnCours
功能是设置task
状态,其中不同的列Tâche à faire
等Tâche en cours
使用todoList
状态。为了使更改反映在不同的列中,您需要将新更改设置为todoList
state。请在下面找到正确的实现。我已经对您的switchEnCours
和switchTerminé
功能进行了更改。
function Task() {
const [task, setTask] = useState({ task: "", etat: "en cours" });
const [todoList, setTodoList] = useState([]);
const switchEnCours = (taskToSwitch) => {
setTodoList((todoList) =>
todoList.map((item) =>
item === taskToSwitch ? { ...item, etat: "terminé" } : item
)
);
};
const switchTerminé = (taskToSwitch) => {
setTodoList((todoList) =>
todoList.map((item) =>
item === taskToSwitch ? { ...item, etat: "supprimé" } : item
)
);
};
const handleInput = (e) => {
setTask({ ...task, task: e.target.value });
};
const AddTask = () => {
setTodoList([...todoList, task]);
console.log(todoList);
};
useEffect(() => console.log(todoList), [todoList]);
return (
<div>
<input onChange={handleInput}></input>
<button onClick={AddTask}>Valider</button>
<div className="DivColonne">
<div className="Colonne">
<h1>Tâche à faire</h1>
{todoList.map((insertTask, index) => {
if (insertTask.etat === "en cours") {
return (
<div>
<p>{insertTask.task}</p>
<button onClick={() => switchEnCours(insertTask)}>
{insertTask.etat}
</button>
</div>
);
} else {
return <div></div>;
}
})}
</div>
<div className="Colonne">
<h1>Tâche en cours</h1>
<div>
{todoList.map((insert) => {
if (insert.etat === "terminé") {
return (
<div>
<p>{insert.task}</p>
<button onClick={() => switchTerminé(insert)}>
{insert.etat}
</button>
</div>
);
}
})}
</div>
</div>
<div>
<h1>Tâches terminées</h1>
<div>
{todoList.map((done) => {
if (done.etat === "supprimé") {
return (
<div>
<p>{done.task}</p>
</div>
);
}
})}
</div>
</div>
</div>
</div>
);
}
export default Task;
您还可以在此代码沙箱中找到正确的实现
推荐阅读
- python-3.x - Matplotlib 子图:在对齐宽度时未绘制时删除子图
- javascript - SyntaxError: Unexpected identifier:new.mongoose.Schema is not working
- javascript - 如何在jstree中单独搜索第n个孩子
- android - 如何在 Android 应用程序中包含不同的语言
- excel - 时间自动刷新
- wordpress - 在媒体 wp api 中上传图片
- c - 我打印学生详细信息的 c 程序不起作用
- python - 在 Django 的详细视图中获取方法
- sql - 如果我对另一个表执行 INNER JOIN,为什么一个表的 SUM 会上升?
- fortran - 在 Fortran 中生成随机数