我正在构建一个简单的ToDoList应用。 我使用React Hook获取列表。 当我添加新的Todo或删除现有的Todo时,请求会发送并运行,但组件不会重新渲染。 我尝试了2种方法来解决创建问题 1。异步功能(删除和添加)。将getToDoList置于钩子之外,并在请求(发布/删除)后调用它
useEffect(() => {
getToDoList();
},[]);
const getToDoList = async () => {
const result = await axios.get('http://localhost:1200/');
setToDoList(result.data);
};
const addNewTodo = async () => {
await axios.post('http://localhost:1200/create',{
item: newToDo.current.value
});
getToDoList();
};
const deleteToDo = async (id) => {
await axios.delete(`http://localhost:1200/delete?id=${id}`);
getToDoList();
};
2。将钩子内的getToDoList放入钩子中,并赋予它2个依赖项,它们在deleteToDo / addNewToDo中发生了变化
const [add,setadd] = useState(false);
const [remove,setRemove] = useState(false);
useEffect(() => {
const getToDoList = async () => {
const result = await axios.get('http://localhost:1200/');
setToDoList(result.data);
};
getToDoList();
},[add,remove]);
const addNewTodo = async () => {
await axios.post('http://localhost:1200/create',{
item: newToDo.current.value
});
setadd(!add);
};
const deleteToDo = async (id) => {
await axios.delete(`http://localhost:1200/delete?id=${id}`);
setRemove(!remove);
};
两者都不起作用。告诉我我错了哪里
JSX
return (
<div>
<Jumbotron>
<Container>
<h1>Hello!</h1>
<p>This is a simple ToDoList created by Vadik</p>
</Container>
</Jumbotron>
<Container>
<Container>
<InputGroup>
<FormControl placeholder="What needs to be done" ref={newToDo}/>
</InputGroup>
<Button onClick={addNewTodo} variant="primary" size="sm">
Add new Todo
</Button>
</Container>
<Container classname="cards">
<Card>
<ListGroup>
{toDoList.todos.map((elem) => <ListGroup.Item
key={elem._id}>{elem.item}<CloseButton onClick={() => deleteToDo(elem._id)}/> </ListGroup.Item>)}
</ListGroup>
</Card>
</Container>
</Container>
</div>
);