我会在这里解释一下,因为我花了一些时间来理解上面的解释,所以我会尽量让它在其他人身上更简单。
您的问题的答案:
1-为什么 return 是一个函数?return () => { ignore = true };
useEffect 提供了返回函数的使用,用于清理函数的目的,OK!,什么时候需要清理?如果你订阅了某个东西,比如你想取消订阅,你应该在 useEffect 内部的“返回函数”中添加取消订阅逻辑,而不是把逻辑放在其他地方,这可能会导致竞争条件!
2- 在这个例子中忽略了什么?
将ignore
被用作告诉忽略API调用或没有功能的标志。什么时候用?当你有竞争条件时。
[竞争条件的例子-你可以忽略这部分你已经熟悉竞争条件]例如你点击产品列表,当每个产品被点击时,如果你快速点击,你会用这个产品信息更新页面多次在产品中,使用效果将在product_id
更改时更新,并且在某些时候单击 product1 [将为 product1 调用 api ] 然后快速 product2 [将为 product2 调用 api 并检索数据导致 -> setProduct(product2data) ) ] 而 product1 的数据刚刚到达导致 -> setProduct(product1data)。这样我们就点击了 product2 !但是 product1 数据出现在页面上!!
屁股有什么关系ignore
??
[逻辑解释]
ignore
亲爱的,告诉setProduct忽略旧数据,不设置,这样我们只会设置最后点击的产品,即使旧数据到了。
[代码说明]
1-第一种情况:没有比赛,点击product1->ignore
为false,调用api,检索数据,if(!ignore
)->将设置product1数据,现在清理功能将设置ignore
为true,恭喜!。
2-第二个场景 -> 竞争条件,点击 product1 -> ignore 为 false,调用 api,[数据仍未到达],现在点击 product2 忽略为 false,调用 api,数据到达,if( !ignore
) -> will设置 product2 数据,清理函数将设置 ignore 为 true , product1 函数数据已到达 -> if( !ignore
) -> 为 false OOOPS,不会设置product1数据“旧数据”。
这样我们将始终拥有新数据。CHEERRRRRRRRS :D