当前位置:首页 > React

react如何避免子组件无谓的渲染

2026-01-26 03:28:49React

使用 React.memo 进行浅比较

React.memo 是一个高阶组件,用于对函数组件进行浅比较。只有当 props 发生变化时,才会重新渲染组件。适用于 props 为基本类型或引用稳定的对象。

const MyComponent = React.memo(function MyComponent(props) {
  /* 使用 props 渲染 */
});

使用 useMemo 缓存计算结果

当子组件的渲染依赖于某个复杂计算时,使用 useMemo 可以避免每次渲染都重新计算。只有当依赖项变化时才会重新计算。

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

使用 useCallback 缓存回调函数

父组件传递给子组件的回调函数如果每次都重新创建,会导致子组件不必要的渲染。使用 useCallback 可以缓存函数引用。

react如何避免子组件无谓的渲染

const memoizedCallback = useCallback(() => {
  doSomething(a, b);
}, [a, b]);

合理设计组件结构

将频繁变化的部分与稳定部分分离成不同组件。通过组件组合的方式,让变化的部分不影响不需要更新的部分。

避免在渲染中使用内联对象和函数

内联创建的对象和函数每次都会生成新的引用,导致子组件认为 props 发生了变化。应该将这些值提升到组件外部或使用 useMemo/useCallback。

react如何避免子组件无谓的渲染

使用 shouldComponentUpdate 生命周期方法

对于类组件,可以通过实现 shouldComponentUpdate 方法来自定义比较逻辑,决定是否需要重新渲染。

shouldComponentUpdate(nextProps, nextState) {
  // 自定义比较逻辑
  return this.props.value !== nextProps.value;
}

使用不可变数据

使用不可变数据可以更容易地比较数据是否发生变化。通过 immer 等库可以方便地处理不可变数据。

使用 Context API 时的注意事项

当使用 Context 时,避免将频繁变化的值放在 Context 中,或者将 Context 拆分为多个更细粒度的 Context。

使用 React DevTools 分析性能

使用 React DevTools 的 Profiler 功能可以分析组件渲染情况,找出不必要的渲染并进行优化。

标签: 无谓组件
分享给朋友:

相关文章

vue轮播组件实现

vue轮播组件实现

Vue 轮播组件实现方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template…

vue实现多级组件

vue实现多级组件

Vue 多级组件实现方法 在 Vue 中实现多级组件通常涉及父子组件通信、动态组件或递归组件等技术。以下是几种常见实现方式: 父子组件嵌套 通过逐层嵌套组件实现多级结构,适用于固定层级场景: &l…

uniapp组件写法

uniapp组件写法

Uniapp 组件的基本写法 Uniapp 的组件写法与 Vue 类似,支持单文件组件(.vue 文件)。一个基本的组件通常包含三个部分:<template>、<script>…

vue实现组件

vue实现组件

Vue 实现组件的方法 Vue 中实现组件可以通过多种方式,包括全局注册、局部注册、单文件组件(SFC)等。以下是常见的实现方法。 全局注册组件 全局注册的组件可以在任何 Vue 实例或组件中使用。…

vue实现秒表组件

vue实现秒表组件

实现秒表组件的基本思路 使用Vue实现秒表组件需要管理时间状态、控制计时器的启动/暂停/重置功能,并通过计算属性动态显示格式化时间。核心逻辑包括利用setInterval更新计时数据,并通过生命周期钩…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pa…