我可以在 useEffect 中调用另一个单独的函数吗?
我在 useEffect 中调用另一个函数,但在保存文件后,它会自动将该函数添加到 useEffect 的数组参数中。
请参阅下面的代码以获得正确的理解。
保存文件前:
useEffect(() => {
getData()
console.log("useEffect ran...");
}, [query]);
function getData() {
fetch(`https://jsonplaceholder.typicode.com/${query}`)
.then(response => response.json())
.then(json => setData(json));
}
保存文件后:
useEffect(() => {
getData();
console.log("useEffect ran...");
}, [getData, query]);
function getData() {
fetch(`https://jsonplaceholder.typicode.com/${query}`)
.then(response => response.json())
.then(json => setData(json));
}
它一次又一次地运行。
原文由 Waseem Maya 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于您在 React 组件中声明了
getData
函数,它将在每次渲染时重新创建,因此效果的依赖关系在每次渲染时都会发生变化。这就是每次渲染都执行效果的原因。为了防止这种情况,您应该在组件外部声明
getData
函数,然后传递查询。像这样:PS:我不确定eslint插件在这样做时是否会自动将getData添加到依赖项中,但即使这样做也不会受到伤害。