如何让useEffect
控制组件更新?
我有这个:
const [data, setData] = useState([]);
useEffect(() => {
fetch("/api/data")
.then((res) => res.json())
.then((res) => {
setData(res.data);
})
.catch((err) => console.error(err));
}, []);
这只会给我带来一次信息,但是如果我对data
中的一个项目做了一些事情,那么在显示data
的组件中不会显示更改。
如果我使用这个:
const [data, setData] = useState([]);
useEffect(() => {
fetch("/api/data")
.then((res) => res.json())
.then((res) => {
setData(res.data);
})
.catch((err) => console.error(err));
}, [data]);
它处于无限的更新循环中。
我只希望它在data
发生任何变化时发生变化,这样它就不会保持在无限循环中,我如何才能实现这一点?
展品:
在我使用过的一些useEffect
中,它会要求我提供依赖关系,但这个特定的useEffect
不会这样做。
2条答案
按热度按时间58wvjzkj1#
尝试在代码中使用setData而不是setStrores
voase2hg2#
在第一种情况下,您将获得
res.data
一次,因为useEffect
在组件呈现时没有依赖触发器。在第二种情况下,
setData
在useEffect
内部被调用,这意味着效果将无限运行,因为每次渲染都设置data