性能优化-react阻止子组件重渲染

因为父组件的状态变更会触发子组件的渲染,可以用shouldComponentUpdate或memo来阻止。下面就来介绍这两种方法。

类组件-shouldComponentUpdate

注:变化需要在render中打印,在component中检测不到
核心代码: 子组件中用shouldComponentUpdate防止子组件重渲染

// 性能优化
shouldComponentUpdate(nextProps, nextState) {if (nextProps.num === this.props.num) return false;return true;
}

完整例子
父组件

export default class Index extends Component {state = {num1: 111,num2: 222,};render() {return (<div><button onClick={() => this.setState({ num1: this.state.num1 + 1 })}>修改num1</button><button onClick={() => this.setState({ num2: this.state.num2 + 1 })}>修改num2</button>// 子组件<Schild num={this.state.num1} /></div>);}
}

子组件

import { Component } from "react";
export default class Index extends Component {constructor(props) {super(props);}// 性能优化shouldComponentUpdate(nextProps, nextState) {if (nextProps.num === this.props.num) return false;return true;}render() {// 父组件的状态变更会触发子组件的渲染console.log("渲染子组件");return (<div><h3>s子组件</h3><div>来自父组件的num1:{this.props.num}</div></div>);}
}

函数组件-memo

可阻止子组件页面重渲染
核心代码:export default memo(Child);
详细代码
子组件

import { useEffect, memo } from "react";const Child = ({ num }) => {useEffect(() => {console.log("渲染子组件");});return (<div><h1>我是子组件</h1><div>来自父组件的参数:{num}</div></div>);
};
export default memo(Child);

父组件

import { useEffect, useState, useMemo } from "react";import Child from "./child";
const Home = () => {const [num1, setNum1] = useState(111);const [num2, setNum2] = useState(222);return (<div><h1>性能优化-usemome</h1><div>num1: {num1};num2: {num2};</div><button onClick={() => setNum1(num1 + 1)}>修改num1</button><button onClick={() => setNum2(num2 + 1)}>修改num2</button><Child num={num1} /></div>);
};
export default Home;

好了,以上就是优化的两种方案。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/61689.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flv格式视频怎么转MP4?视频格式转换方法分享

FLV格式的视频是一种早期的视频格式&#xff0c;不支持更高的分辨率和比特率&#xff0c;这意味着视频的清晰度和质量受限制&#xff0c;无法很好地保留细节和质量&#xff0c;这种格式的视频已经逐渐被更高质量的视频格式所替代&#xff0c;例如MP4格式&#xff0c;不仅具有很…

SpringBoot自定义拦截器interceptor使用详解

Spring Boot拦截器Intercepter详解 Intercepter是由Spring提供的Intercepter拦截器&#xff0c;主要应用在日志记录、权限校验等安全管理方便。 使用过程 1.创建自定义拦截器&#xff0c;实现HandlerInterceptor接口,并按照要求重写指定方法 HandlerInterceptor接口源码&am…

oi知识表+NOIP提高组算法及算法思想总结

&#xfeff;算法及算法思想总结 │ By lib │ ├暴力 ├模拟 ├递归及递推:数位统计类 ├构造 ▼├排序算法 │ ├冒泡排序 │ ├选择排序 │ ├计数排序 │ ├基数排序 │ ├插入排序 │ ├归并排序 │ ├快速排序 │…

最大子数组和【力扣53】

一、解题思路 Max[i]表示&#xff1a;以nums[i]为开头的所有连续子数组和的最大值。 由此可以推出Max[i-1]和Max[i]的关系&#xff1a; 若Max[i]>0&#xff1a;Max[i-1]nums[i-1]Max[i]&#xff1b; 否则&#xff1a;Max[i-1]nums[i-1]&#xff1b; 则ansMAX&#xff0…

wms仓储管理系统是什么,wms仓储管理系统有什么用

阅读本文&#xff0c;您可以了解&#xff1a;1、wms仓储管理系统是什么&#xff1b;2、wms仓储管理系统有什么用 一、wms仓储管理系统是什么 WMS是Warehouse Management System&#xff08;仓储管理系统&#xff09;的缩写。它是一种用于优化和管理仓库操作的软件系统。WMS帮…

2023年加湿器市场数据分析(天猫数据分析怎么做)

随着人们生活水平提高、空调广泛使用&#xff0c;导致皮肤紧绷、口舌干燥、咳嗽感冒等空调病的滋生。可以看出&#xff0c;空气湿度与人体健康以及日常生活有着密切的联系。而加湿器作为室内空气湿度控制的重要工具&#xff0c;在近年来受到了越来越多的重视。根据鲸参谋电商数…

【C++常见八股1】内存布局 | 参数压栈 | 构造析构调用 | 空类大小

内存布局 .text 代码段&#xff1a;存放二进制代码、字符串常量.data 段&#xff1a;存放已初始化全局变量、静态变量、常量.bss 段&#xff1a;未初始化全局变量&#xff0c;未初始化静态变量heap 堆区&#xff1a;new/malloc 手动分配的内存&#xff0c;需要手动释放stack 栈…

易服客工作室:创建WordPress会员网站的终极指南

您想建立会员网站吗&#xff1f;长期以来&#xff0c;网站所有者仅依靠广告和联盟收入来将其内容货币化。 会员网站允许您通过用户支付高级内容、功能和社区访问权限来赚钱。 您将需要一个具有管理用户、会员资格、付款等功能的平台。幸运的是&#xff0c;有一些非常好的Word…

深度学习部署:FastDeploy部署教程(CSharp版本)

FastDeploy部署教程(CSharp版本) 1. FastDeploy介绍 FastDeploy是一款全场景、易用灵活、极致高效的AI推理部署工具&#xff0c; 支持云边端部署。提供超过 &#x1f525;160 Text&#xff0c;Vision&#xff0c; Speech和跨模态模型&#x1f4e6;开箱即用的部署体验&#xf…

苏州OV泛域名RSA加密算法https

RSA加密算法是一种非对称加密算法&#xff0c;它被广泛应用于信息安全领域。与对称加密算法不同&#xff0c;RSA加密算法使用了两个密钥&#xff0c;一个公钥和一个私钥。公钥可以公开&#xff0c;任何人都可以使用它加密信息&#xff0c;但只有私钥的持有者才能解密信息。RSA加…

TZOJ 曹冲养猪 (扩展)中国剩余定理

求解&#xff1a; M a1 (b1) M a2 (b2) M a3 (b3) ........ 对于 上述式子我们可以拆成 &#xff1a; M b1 * p a1 b2 * q a2 左右移项得到&#xff1a; b1 * p - b2 * q a2 - a1 可以发现 这就是一个同余方程&#xff1a; a b1 , b b2 , x p , y q , c …

虹科方案 | 汽车总线协议转换解决方案(二)

上期说到&#xff0c;虹科的PCAN-LIN网关在CAN、LIN总线转换方面有显著的作用&#xff0c;尤其是为BMS电池通信的测试提供了优秀的解决方案。假如您感兴趣&#xff0c;可以点击文末相关链接进行回顾&#xff01; 而今天&#xff0c;虹科将继续给大家带来Router系列在各个领域的…