在另一StackOverflow上后,谢霆锋让我了解到,一个Context.Provider
重新呈现其子Context.Consumer
组件时的上下文值的Provider
规定变化。
官方文件进一步证实了这一点:
只要提供商的价值支柱发生变化,作为提供商的后代的所有消费者都将重新渲染。
尼古拉斯还帮助我理解,Provider
知道上下文值是否已更改的唯一方法是其包围组件是否重新渲染。
总之:
Providers
Consumers
每当上下文值更改时更新它
仅当Provider
重新渲染周围的封闭功能时,才会发生这种情况
Provider
无论如何,都会导致及其所有后代重新渲染
因此,上述(1)中的功能似乎是多余的。如果Provider
仅Consumers
在其包围组件重新渲染时才更新,并且只有在父级重新渲染时才可以发现上下文值更新,所以不需要具有允许在上下文值更改时Provider
更新的功能。Consumers
我在这里想念什么?
编辑
尼古拉斯在评论中还说:
应用程序可以(可以想象)由于与上下文无关的事情而重新渲染。如果发生这种情况,则您不希望使用者重新提交。为此,您需要通过===检查之前的值和之后的值。如果要提供对象,则意味着您无法在App的render方法中创建全新的对象,否则最终将不必要地重新渲染使用者。
但是,我给人的印象是,当父母重新渲染时,其所有孩子也会重新渲染。因此,===
上面提到的支票将无济于事,即孩子们无论如何都将重新渲染。
噜噜哒
莫回无
相关分类