我一直在努力将一些有状态组件重构为有状态功能组件,并且一切正常,但是我研究了初学者的问题,但找不到解决方案...什么是正确的方法获取功能组件中的数据?我已经阅读了很长一段时间,并且无法理解某些概念。就像来自React Docs的这句话一样:
如果要运行效果并仅将其清理一次(在挂载和卸载时),则可以将空数组([])作为第二个参数传递。这告诉React,您的效果不依赖于道具或状态的任何值,因此它不需要重新运行。这不是特殊情况,它直接取决于依赖项数组始终如何工作。
如果传递一个空数组([]),则效果内的道具和状态将始终具有其初始值。尽管将[]作为第二个参数传递给了更熟悉的componentDidMount和componentWillUnmount心智模型,但通常会有更好的解决方案来避免过于频繁地重新运行效果。另外,别忘了React在浏览器绘制完成之后才推迟useEffect的运行,因此进行额外的工作不会有什么问题。
我的问题是:这些解决方案可以防止效果频繁运行或仅运行一次。我当前的解决方法是在挂钩内添加一个控制变量,以防止代码执行情况成立。像这样:
useEffect(()=>{
if(fetched){
...//effect
}
})
但是我不确定这是否是一个好习惯。将空数组作为第二个参数传递也可以,但是会抛出eslint警告(也记录在react的文档中)。所以,我做对了吗?有更好的解决方案吗?