Javascript React Hooks-0与空数组作为useffect中的第二个参数
我看到有人在useEffect中使用0而不是空数组作为第二个参数 所以不是Javascript React Hooks-0与空数组作为useffect中的第二个参数,javascript,reactjs,use-effect,Javascript,Reactjs,Use Effect,我看到有人在useEffect中使用0而不是空数组作为第二个参数 所以不是 useEffect(() => { console.log('Run once'); }, []); 是的 useEffect(() => { console.log('Run once'); }, 0); 它似乎也有同样的效果,所以我想知道他为什么用这个 空数组视为0,具体取决于对其求值的方式。例如,[]==0为真,但[]==0为假。因此,在这种情况下,引擎盖下可能没有严格的比较,如果使
useEffect(() => {
console.log('Run once');
}, []);
是的
useEffect(() => {
console.log('Run once');
}, 0);
它似乎也有同样的效果,所以我想知道他为什么用这个
空数组视为0,具体取决于对其求值的方式。例如,[]==0
为真,但[]==0
为假。因此,在这种情况下,引擎盖下可能没有严格的比较,如果使用0也没关系
只需遵循react文档,我将使用一个空数组
:
如果你想运行一个特效并且只清理一次(在安装和
卸载),可以将空数组([])作为第二个参数传递。这
告诉React您的效果不依赖于道具的任何值
或状态,因此它永远不需要重新运行。这不是一个特殊的问题
案例-它直接从依赖项数组始终
工作
我想知道0
是否是一个可能比[]
更简洁的二进制参数,或者使用0
是一种不好的做法,或者它是否无关紧要,[]
只是一种首选约定
谢谢。尽管控制台日志错误说明了一切: react dom.development.js:88警告:useEffect收到的最后一个参数不是数组(而是收到的
number
)。指定时,最后一个参数必须是数组
我认为使用
[]
将是更好的方法,因为useffect
的第二个参数的目的。即使您只想确保效果只运行一次,也应该将参数视为依赖项数组。这是useEffect函数的签名
export function useEffect(
create: () => (() => void) | void,
deps: Array<mixed> | void | null,
): void {
const dispatcher = resolveDispatcher();
return dispatcher.useEffect(create, deps);
}
导出函数useffect(
创建:()=>(()=>void)| void,
deps:Array | void | null,
):无效{
const dispatcher=resolvedpatcher();
返回dispatcher.useffect(创建,deps);
}
在这里,您可以看到它只接受一个数组,void或null,因此正确的答案是,如果您只想运行一次数组,则始终发送一个数组,该数组传递的依赖项列表不是数组文本。这意味着我们无法静态验证您是否通过了正确的依赖项/dep 尝试运行放置0或null的代码时收到此警告 所以我想如果你想运行一次代码,发送一个数组会更好