首页 > 其他分享 >【React篇】父组件渲染时避免重复渲染子组件的3种处理方法

【React篇】父组件渲染时避免重复渲染子组件的3种处理方法

时间:2024-06-21 14:30:44浏览次数:10  
标签:渲染 React export props 组件 ChildComponent

在 React 中,父组件渲染时要避免重复渲染子组件,可以使用以下方法:

  1. 使用 React.memo(仅适用于函数式组件)或 PureComponent(适用于类组件):
    这些方法可以帮助你创建在接收到新的 props 时仅在有必要的情况下重新渲染的组件。它们通过浅比较新旧 props 来判断是否需要重新渲染。

对于函数式组件:

import React from 'react';

const ChildComponent = React.memo(function({ prop }) {
  // 子组件渲染逻辑
});

export default ChildComponent;

对于类组件:

import React, { PureComponent } from 'react';

class ChildComponent extends PureComponent {
  // 子组件渲染逻辑
}

export default ChildComponent;
  1. 使用 shouldComponentUpdate 生命周期方法(适用于类组件):
    这个方法允许你在子组件渲染之前自定义是否进行渲染的逻辑。你需要返回一个布尔值,表示是否应该继续渲染。
import React, { Component } from 'react';

class ChildComponent extends Component {
  shouldComponentUpdate(nextProps, nextState) {
    // 比较新旧 props,如果相同则不重新渲染
    return this.props !== nextProps || this.state !== nextState;
  }

  // 子组件渲染逻辑
}

export default ChildComponent;
  1. 使用 React.useMemoReact.useCallback Hooks(适用于函数式组件):
    这两个 Hooks 可以帮助你分别缓存值和函数,以避免不必要的重新渲染。

例如,如果你有一个依赖于父组件状态的事件处理程序,你可以使用 useCallback 来确保事件处理程序在父组件状态未更改时保持不变:

import React, { useCallback } from 'react';

function ParentComponent() {
  const [parentState, setParentState] = useState('initial');

  const handleClick = useCallback(() => {
    console.log('Parent state:', parentState);
  }, [parentState]);

  return (
    <div>
     <button onClick={handleClick}>Click me</button>
     <ChildComponent onClick={handleClick} />
    </div>
  );
}

function ChildComponent({ onClick }) {
  // 子组件渲染逻辑
}

export default ParentComponent;

通过使用这些方法,可以有效地避免子组件在父组件渲染时的重复渲染,从而提高应用程序的性能。

标签:渲染,React,export,props,组件,ChildComponent
From: https://blog.csdn.net/qq_37268201/article/details/139856809

相关文章

  • 自定义组件获取接口数据
    <template><divclass="ting-title"><spanclass="text">{{text}}</span></div></template><script>exportdefault{name:'TingTitle',data:()=>{......
  • 鸿蒙UI开发快速入门 —— part07:组件状态管理之@Prop/@Link装饰器
    1、前言我们在上一章学习了@State装饰器,@State装饰器的作用范围仅仅在当前组件,接下来,我们讨论如何从父组件中传入参数到子组件,让子组件随着父组件的状态发生变化。本章将要介绍的就是:@Props装饰器。2、@Props装饰器@Prop装饰的变量可以和父组件建立单向的同步关系。@Prop装......
  • 微信小程序学习(七):自定义组件和通信
    1、基本知识开发中常见的组件主要分为公共组件和页面组件两种,因此注册组件的方式也分为两种:全局注册:在app.json文件中配置usingComponents节点进行引用声明,注册后可在任意组件使用局部注册:在页面.json文件中配置usingComponents节点进行引用声明,只可在当前页面......
  • 对于react的 <outlet />的理解
    先贴代码layouts文件夹里面有一个文件index.tsx1import{Link,Outlet}from'umi';2importstylesfrom'./index.less';34exportdefaultfunctionLayout(){5return(6<divclassName={styles.navs}>7<ul>8......
  • React+TS前台项目实战(十四)-- 响应式头部导航+切换语言相关组件封装
    文章目录前言Header头部相关组件1.功能分析2.相关组件代码+详细注释3.使用方式4.Gif图效果展示总结前言在这篇博客中,我们将封装一个头部组件,根据不同设备类型来显示不同的导航菜单,会继续使用Reacthooks和styled-components库来构建这个组件,此外,也会实现切换......
  • 【重要公告】DevExpress地图组件 - Bing地图企业服务弃用
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress近期重要版本v23.2已正式发布,该版本拥有众多新产品和数十个具有高影响力的功......
  • 深度分析:React Native、Flutter、UniApp、Taro、Vue的差异
    深度分析:ReactNative、Flutter、UniApp、Taro、VueReactNative优势:跨平台代码共享:使用JavaScript和React,可以为iOS和Android开发应用,代码复用率高。活跃社区和生态系统:React和ReactNative有庞大的社区,提供了大量的第三方库和插件。热重载:开发效率高,修改代码后几乎......
  • Chip组件的用法
    文章目录概念介绍使用方法示例代码其它类Chip我们在上一章回中介绍了SliderWidget相关的内容,本章回中将介绍如何使用ChipWidget.闲话休提,让我们一起TalkFlutter吧。概念介绍本文中提到的ChipWidget在屏幕上显示一小块区域,类似悬浮的按钮,通常在网页类操作中比......
  • 鸿蒙开发组件:【DataAbility权限控制】
    DataAbility权限控制DataAbility提供数据服务,并不是所有的Ability都有权限读写它,DataAbility有一套权限控制机制来保证数据安全。分为静态权限控制和动态权限控制两部分。静态权限控制DataAbility作为服务端,在被拉起的时候,会根据config.json里面配置的权限来进行校验,有"r......
  • 鸿蒙开发组件:【FA模型的Context】
    FA模型的ContextFA模型下只有一个Context。Context中的所有功能都是通过方法来提供的,它提供了一些featureAbility中不存在的方法,相当于featureAbility的一个扩展和补全。接口说明FA模型下使用Context,需要通过featureAbility下的接口getContext来获取,而在此之前,需要先导入......