Reactjs React内联函数性能澄清

Reactjs React内联函数性能澄清,reactjs,Reactjs,鉴于此: 对于Child2-如果我不向它传递内联函数,为什么它会被重新渲染 如能澄清,我将不胜感激 这是因为clickMe的函数指针在每次父对象重新渲染时都会更改。要避免这种不必要的重新渲染,可以更改此行 export default Child2 到 阅读有关记忆的更多信息。记忆函数是作为值传入的,因此将内联函数传递给组件只会在值更改时重新呈现。在这种情况下,函数更改不会在重新呈现时重新定义。 您正在传入this.clickMe引用的函数,该函数仅在父组件初始化时定义一次 如果传入在父级的

鉴于此:

对于Child2-如果我不向它传递内联函数,为什么它会被重新渲染


如能澄清,我将不胜感激

这是因为clickMe的函数指针在每次父对象重新渲染时都会更改。要避免这种不必要的重新渲染,可以更改此行

export default Child2

阅读有关记忆的更多信息。

记忆函数是作为值传入的,因此将内联函数传递给组件只会在值更改时重新呈现。在这种情况下,函数更改不会在重新呈现时重新定义。 您正在传入this.clickMe引用的函数,该函数仅在父组件初始化时定义一次

如果传入在父级的渲染方法中重新定义的函数,则Child2组件将在每次父级的每个渲染周期中声明和传递新函数时重新渲染

当状态更改时,父对象重新渲染,因此它再次调用Child1和Child2,并重新渲染,但生成的DOM保持不变。您可以通过更改DOM direct和see来证明这一点,即使它重新呈现,DOM仍然保持不变


为了更好地理解渲染,这里有一本很好的读物:

不确定您是否有这个问题,请在您的文章中用示例代码说明您到底想指出什么at@Rikin对不起,我编辑了我的问题。基本上-我认为传递内联函数是导致重新渲染的原因,但如果您查看Child2,情况似乎并非如此。同样遵循本线程中关于内联函数的主题:我知道记忆化。但是,如果函数不是像Child2那样内联定义的,那么它不应该阻止“子组件”被重新呈现吗?但是在我的示例中,每次父状态改变时,Child1和Child2都会被呈现。。这就是我所困惑的。我正在通过引用向Child2传递一个函数,为什么它会重新呈现?是的,这就是我在最初的几天里困惑的地方。显然,这就是React diffing算法发挥作用的地方,它查看新的渲染快照和旧的渲染快照,只更改更改的内容。在这种情况下,子组件即使在新的重新渲染周期中,结果对象仍然是相同的,因此不会更新。抱歉,我仍然有点困惑。。如果道具中没有任何更改,为什么要重新渲染Child2?父级重新渲染,因此它再次调用Child1和Child2,并重新渲染,但生成的DOM保持不变。因此,无论是否使用内联函数,只要渲染父级,所有子级都会重新渲染?考虑到你没有使用备忘录
export default React.memo(Child2)