假设我有这个组件,带有以下钩子:
function SomeComponent(props) {
useEffect(
() => {
//....code
if (props.propOne === ....) { .... }
// ...code
if (props.propTwo === ....) { .... }
},
[props.propOne]
)
return <Something />
}
上面的钩子将运行
的值props.propOne
更改但是请注意,钩子回调还引用了pros.propTwo
,而实际上没有将其传递给依赖项数组。
虽然props.propTwo
永远不会考虑钩子是否被重新执行,但钩子回调在其主体中引用的值会发生什么变化?
例如
props.propOne==A
和props.propTwo==B
A
和B
props.propOne==C
和props.propTwo==D
props.propOne
已更改。对于props.propOne
它引用值C
,但是对于props.propTwo
值它引用了什么<代码>B或D
钩子引用值是基于组件执行时创建的闭包,还是React做了一些巫术,它只保留传递给依赖关系数组的值的更新值?
从文档中:
依赖项数组不会作为参数传递给回调。不过,从概念上讲,它们就是这样表示的:回调中引用的每个值也应该出现在dependencies数组中。
更新:
问了这个问题后,我想到了丹·阿布拉莫夫的这篇文章:
https://overreacted.io/a-complete-guide-to-useeffect/
我建议大家读一读。
React钩子
严重依赖于闭包
来利用值。钩子中引用的值将是上次调用useEffect时出现在其闭包中的值。
例如,在您的示例中,如果更改了props.propOne
,并且在随后的渲染props.propTwo中更改了props.propTwo
,则useffect
回调中的props.propTwo
的值将与以前的值相同,因为在props.propTwo
更改时不执行useffect。
但是,如果同时更新props.propOne
和props.propTwo
,则useffect
钩子中的值将是更新后的值。
考虑到props.propOne
和props.propTwo
一起更改并触发渲染的情况,props.propTwo
的值将是D
内部的use效应
回调
我一直在读这方面的文章,原因是Bazel在二进制文件的中只添加了它的直接依赖项。因为是传递依赖项,所以二进制文件找不到它。 为了解决这个问题,我可以想到以下几个黑客: > 添加难看的链接器标志,告诉Bazel添加到而不是。但是,这被认为是一个坏主意,因为不推荐使用,并且不允许通过重写。 使用而不是 使用而不是. 谢了!
问题内容: 由于缺乏对我想使用的某些库的支持,我将一些Python开发从Windows迁移到Linux开发。我整天的大部分时间都在搞弄依赖关系无所适从。 问题 每当我选择Linux时,无论是通过apt-get,easy_install还是pip进行安装,我通常都会遇到某种依赖问题,通常与开发库有关。我本可以将几天的时间浪费在应该是简单的任务上,而不是编写代码,而要花更长的时间使库工作。 在哪里可以
我有一个maven模块化项目,其构建顺序如下。 每个模块都有自己的pom。xml和构建顺序包含在父pom中。因此,当我对进行任何更改时,我应该只构建common模块还是再次构建所有模块,以从common模块获取最新的更改?
问题内容: 我试图将我的数据库对象传递给我的处理程序,而不是具有全局对象。但是我不知道这是否可行,我使用的是Gorilla Mux软件包,我可以看到它把闭包作为第二个参数。 然后定义了我可以使用的参数,理想情况下,我希望拥有这样的第三个参数。 有解决方法吗?还是我需要一个全局数据库对象?我是Go的新手,所以请详细说明可能的答案。 问题答案: 欢迎来到。 可以使用全局变量,特别是数据库对象。 但是,
问题内容: 我希望一个长时间运行的进程通过一个队列(或类似的东西)返回其进度,该队列将被馈送到进度栏对话框。该过程完成后,我还需要结果。这里的测试示例以失败。 我已经能够得到这个使用单独的进程对象的工作(在这里我 很 alowed传递一个队列引用),但是我没有一个池来管理许多过程我想推出。有什么更好的模式建议吗? 问题答案: 以下代码似乎有效: 请注意,队列是从manager.Queue()而不是