javascript - 有没有办法同时用多个回调修改相同的状态?
问题描述
我正在尝试修改由对象数组组成的状态。我有一个带有 3 个输入(添加、修改、删除)的表单,我想知道是否有办法应用所有三个回调,我似乎无法实现,因为我相信函数是使用“陈旧”状态,因此仅应用 2 个回调。我尝试使所有代码异步,但这似乎不起作用。这是我的代码:
// I inherit the array from the context provider
const { libros, setLibros } = useContext(AppContext);
const [libro, setLibro] = useState("");
const [modificar, setModificar] = useState({
libroAModificar: "",
modificado: ""
});
const { libroAModificar, modificado } = modificar;
const [eliminar, setEliminar] = useState("");
const handleAgregar = (e) => {
setLibro(e.target.value);
};
const handleEliminar = (e) => {
setEliminar(e.target.value);
};
const handleModificar = (e) => {
setModificar({
...modificar,
[e.target.name]: e.target.value
});
};
// these are the three functions I'd like to execute on the same state
const handleNuevoLibro = (e) => {
e.preventDefault();
if (libro !== "") {
const conNuevosLibros = [
...libros,
{
nombre: libro,
leido: false,
id: libros.length + 1
}
];
setLibros(conNuevosLibros);
setLibro("");
}
};
const handleLibroModificado = (e) => {
e.preventDefault();
if (modificar !== "") {
const modifiedLibros = libros.map((book) => {
if (book.nombre.toLowerCase() === libroAModificar.toLowerCase()) {
book.nombre = modificado;
}
return book;
});
setLibros(modifiedLibros);
setModificar({
libroAModificar: "",
modificado: ""
});
}
};
const handleLibroEliminado = (e) => {
e.preventDefault();
if (eliminar !== "") {
const librosConEliminado = libros.filter((book) => {
return book.nombre.toLowerCase() !== eliminar.toLowerCase();
});
setLibros(librosConEliminado);
setEliminar("");
}
};
// this is not working, it's only executing 2 of the three functions, or it's working on a stale state.
const handleChange = (e) => {
e.persist();
handleNuevoLibro(e);
handleLibroModificado(e);
handleLibroEliminado(e);
};
return (
<div>
<form>
<input
type="text"
placeholder="agregar"
onChange={handleAgregar}
value={libro}
></input>
<br />
<input
type="text"
name="libroAModificar"
className="modificar"
placeholder="inserte libro a modificar"
onChange={handleModificar}
value={libroAModificar}
></input>
<input
type="text"
name="modificado"
className="modificado"
placeholder="inserte nuevo nombre"
onChange={handleModificar}
value={modificado}
></input>
<br />
<input
type="text"
className="borrar"
placeholder="inserte libro a eliminar"
onChange={handleEliminar}
value={eliminar}
></input>
<br />
<button onClick={handleChange}>Enviar</button>
</form>
<br />
</div>
);
}```
Any help would be greatly appreciated. Thanks in advance.
解决方案
推荐阅读
- python-3.x - 我应该在生成器和函数之间使用什么来返回在 python 中进行简历解析,我需要一次处理大量简历?
- javascript - React 根据结果数量动态创建按钮
- javascript - 用图像打印出 div 的内容
- r - r闪亮错误:无法将类“函数”强制转换为data.frame
- ckeditor - 如何去除ck编辑器源代码中的html标签
- python - 删除 3-d 数组中低于阈值的连接组件
- android - SQLite 数据不持久
- azure - 在服务器数据库更改时本地刷新数据
- android - kotlinx.android.synthetic 未使用的 android studio 问题
- php - Laravel 关于共享主机问题