React 怎样发现重新渲染的组件

1,883 阅读1分钟

image.png

通过 console.log

通过上面的 React update 流程,我们发现每次渲染组件的时候,都会通过组件返回的 JSX 再去到后面的流程,所以我们可以在组件写 console.log 来判断组件是否重新渲染,如下:

Function Component,在函数体语句写 console.log

const Box = () => {
  console.log('Box render.');
  
  return <div></div>;
}

Class Component,在 render() 函数写 console.log

class Box extends React.Component {
  render() {
    console.log("Box render.");

    return <div>Box</div>;
  }
}

使用 React DevTools

我们可以在 React DevTools 启用 Highlight updates when components render 功能,这时候每当组件发生渲染的时候,组件就会高亮。

image.png

2022-10-04 15-31-35.2022-10-04 15_31_45.gif

你还可以通过 React DevTools Profiler 功能查看组件为什么渲染、渲染的时间等等信息,对之后组件的优化可以起到参考作用。

Virtual DOM 和 Real DOM

组件的重复渲染不一定会直接操作到真实DOM,因为 React 有 Diff 算法来避免操作无更新的真实DOM,我们可以打开 Chrome 开发者工具 -> More tools -> Rendering,开启 Paint flashing,这时候我们可以观察到真实DOM的操作情况。

image.png

image.png

2022-10-04 15-33-51.2022-10-04 15_34_10.gif

个人看法

虽然说减少组件重新渲染可以提升一定的性能,但是我们也不能盲目地避免渲染,需要视情况而优化,如果是为了避免重新渲染而降低了代码的可读性,这样有点得不偿失。

REFS

jsramblings.com/how-to-chec…