【发布时间】:2020-06-27 18:54:42
【问题描述】:
所以我得到了这个组件:
export default function () {
const [todos, setTodos] = useState([]);
useEffect(() => {
function populateTodos () {
axios.get(`http://localhost:8000/api/all-todos`)
.then(res => setTodos(res.data))
.catch(err => console.log(err));
}
populateTodos();
}, []);
console.log(todos);
return (
<div>
...
</div>
);
}
我正在使用useEffect 挂钩从数据库中获取所有待办事项,它工作正常。问题是我不知道如何使用useEffect 来触发重新渲染,只要我对 todos 数组进行修改,比如添加、删除或更新。如果我为useEffect 的依赖数组提供todos 变量,我会在控制台中得到一个无限循环日志记录。
如何在 todos 数组更新时使用 useEffect 触发重新渲染?
【问题讨论】:
-
我认为如果您在
<div>元素之间添加{todos.length}例如,它会首先显示0然后重新呈现一次setTodos正在更改todos状态的值和表示下一个长度。 -
它不起作用。谢谢。
-
控制台上是否有任何错误?
-
你能说明“对 todos 数组进行修改”是什么意思吗?也许问题就在那里,而不是在给出的代码中。
-
在这种情况下,您需要集中状态。有几种方法可以做到这一点:将状态提升到父组件,使用上下文 API,设置存储管理库(如 Redux)......
标签: javascript reactjs axios react-hooks use-effect