react 【二】 setState/react性能优化/dom操作

文章目录

  • 1、setState
    • 1.1 setState的三种用法
    • 1.2 setState为什么是异步
  • 2、React性能优化
    • 2.1 react的更新机制
    • 2.2 如何优化性能
      • 2.2.1 shouldComponentUpdate
      • 2.2.2 PureComponent
      • 2.2.3 memo
  • 3、不可变数据的力量
  • 4、dom操作
    • 4.1 通过ref获取dom的三种方式
    • 4.2 执行子组件的方法(类组件
    • 4.3 获取函数式组件的dom

1、setState

在这里插入图片描述

1.1 setState的三种用法

import React, { Component } from "react";class App extends Component {constructor(props) {super(props);this.state = {message: "今年18",count: 0,};}changeText() {//方法1// 是通过object.assign// this.setState({ message: "今年十八" });console.log();// 方法2// 好处1:可以在回调函数中编写新的state的逻辑// 好处2:可以将state和props传递进去(state是指拿到最新的即相当于同步的数据)// this.setState((state, props) => {//   console.log(state.count, props);//   return {//     message: "今年十八",//   };// });console.log();// 方法3 setState是异步调用// 如果希望在修改完成后立刻执行的话,需要传入一个回调函数this.setState({ message: "今年十八" }, () => {console.log("执行完成后的回调", this.state.message);});console.log("正常回调", this.state.message);}render() {const { message, count } = this.state;return (<div><button onClick={(e) => this.changeText()}>改变文案</button><h1>{message}</h1></div>);}
}export default App;

1.2 setState为什么是异步

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、React性能优化

2.1 react的更新机制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 如何优化性能

在这里插入图片描述

2.2.1 shouldComponentUpdate

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.2 PureComponent

在这里插入图片描述
在这里插入图片描述

2.2.3 memo

在这里插入图片描述
在这里插入图片描述

3、不可变数据的力量

在这里插入图片描述
在这里插入图片描述

4、dom操作

4.1 通过ref获取dom的三种方式

在这里插入图片描述
在这里插入图片描述

import React, { PureComponent, createRef } from "react";export class App extends PureComponent {constructor() {super();this.state = {};this.titleRef = createRef();this.titleEl = null;}getDom() {// 方式1console.log(this.refs.why);// 方式2 创建对象console.log(this.titleRef.current);// 方式3 传入回调函数,在对应的元素被渲染之后,回调函数执行,并且将元素传入console.log(this.titleEl);}render() {return (<div><h1 ref="why">Hello World</h1><h1 ref={this.titleRef}>你好啊</h1><h1 ref={(el) => (this.titleEl = el)}>第三种方式</h1><button onClick={(e) => this.getDom()}>获取DOM</button></div>);}
}export default App;

4.2 执行子组件的方法(类组件

import React, { PureComponent, createRef } from "react";class HelloWord extends PureComponent {test() {console.log("我是类组件的test方法");}render() {return <h1>Hello World</h1>;}
}class componentName extends PureComponent {constructor() {super();this.compRef = createRef();}handleClick() {this.compRef.current.test();}render() {return (<div><HelloWord ref={this.compRef} /><button onClick={(e) => this.handleClick()}>点击执行</button></div>);}
}export default componentName;

4.3 获取函数式组件的dom

在这里插入图片描述

import React, { PureComponent, createRef, forwardRef } from "react";const HelloWord = forwardRef(function (props, ref) {return (<div><h1 ref={ref}>Hello组件</h1></div>);
});class componentName extends PureComponent {constructor() {super();this.compRef = createRef();}handleClick() {console.log(this.compRef.current);}render() {return (<div><HelloWord ref={this.compRef} /><button onClick={(e) => this.handleClick()}>点击执行</button></div>);}
}export default componentName;

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

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

相关文章

大模型提示学习、Prompting微调知识

为什么需要提示学习&#xff1f; 提示学习是一种在自然语言处理任务中引入人类编写的提示或示例来辅助模型生成更准确和有意义的输出的技术。以下是一些使用提示学习的原因&#xff1a; 解决模糊性&#xff1a;在某些任务中&#xff0c;输入可能存在歧义或模糊性&#xff0c;通…

【ES】--Elasticsearch的分词器详解

目录 一、前言二、分词器原理1、常用分词器2、ik分词器模式3、指定索引的某个字段进行分词测试3.1、采用ts_match_analyzer进行分词3.2、采用standard_analyzer进行分词三、如何调整分词器1、已存在的索引调整分词器2、特别的词语不能被拆开一、前言 最近项目需求,针对客户提…

Java多线程 继承Thread类

目录 程序 进程 线程多线程实例创建线程测试线程 程序 进程 线程 程序&#xff0c;进程和线程是操作系统中的基本概念&#xff0c;它们在多线程编程中起着重要的作用。 程序&#xff1a;程序是一组指令的集合&#xff0c;用于实现特定的功能。程序通常是静态的&#xff0c;在程…

【开源】基于JAVA+Vue+SpringBoot的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

Java学习笔记------ArrayList(二)

基本数据类型对应的包装类 byte------Byte、short------Short char------Character、int------Intege long------Long、float------Float double------Double、boolean------Boolean 例如&#xff1a; import java.util.ArrayList; public class test01{public static vo…

Arduino 开发环境

Arduino 刚开始挺简单的&#xff0c;买一块 UNO 或者 Nano&#xff0c;官网下载 IDE &#xff08;在线的就算了&#xff0c;太慢&#xff09;&#xff0c;立即就可以开始编程了&#xff0c;至少让板载 LED 亮起来没问题。这也是 Arduino 亲儿子的优势&#xff0c;省心。 不过你…

云服务器操作系统Windows和Linux镜像有什么区别?

阿里云服务器镜像Windows和Linux操作系统有什么区别&#xff1f;性能有差异吗&#xff1f;有&#xff0c;同配置下Linux性能要优于Windows&#xff0c;但这与阿里云无关&#xff0c;仅仅是linux和windows之间的区别。另外&#xff0c;阿里云提供的windows和linux操作系统均为正…

Java中 HashSet如何判断两个对象是否相等

HashSet如何判断两个对象是否相等 HashSet 是 Java 中的一个类&#xff0c;它实现了 Set 接口。HashSet 中的元素是无序且唯一的&#xff0c;它不保证元素的顺序&#xff0c;也不允许出现重复元素。为了确定两个对象是否相等&#xff0c;HashSet 使用了以下两个方法&#xff1…

LeetCode、338. 比特位计数【简单,位运算】

文章目录 前言LeetCode、338. 比特位计数【中等&#xff0c;位运算】题目链接与分类思路位运算移位处理前缀思想实现 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java…

Vue3快速上手(三)Composition组合式API及setup用法

一、Vue2的API风格 Vue2的API风格是Options API,也叫配置式API。一个功能的数据&#xff0c;交互&#xff0c;计算&#xff0c;监听等都是分别配置在data, methods&#xff0c;computed, watch等模块里的。如下&#xff1a; <template><div class"person"…

Leetcode 606.根据二叉树创建字符串

给你二叉树的根节点root&#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对"root"表示&#xff0c;转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射…

[ai笔记1] 借着“ai春晚”开个场

1 文思ai笔记-新的开始 今天是2024年2月29日&#xff0c;也是传统农历的除夕夜。早起在ai圈看到一个比较新奇的消息&#xff0c;ai春晚今日举办&#xff0c;竟然有一点小小的激动。这些年确实好久没看过春晚了&#xff0c;自己对于春晚的映像还停留在“白云黑土”、“今天&…

论文解读:MobileOne: An Improved One millisecond Mobile Backbone

论文创新点汇总&#xff1a;人工智能论文通用创新点(持续更新中...)-CSDN博客 论文总结 关于如何提升模型速度&#xff0c;当今学术界的研究往往聚焦于如何将FLOPs或者参数量的降低&#xff0c;而作者认为应该是减少分支数和选择高效的网络结构。 概述 MobileOne(≈MobileN…

react【五】redux/reduxToolkit/手写connext

文章目录 1、回顾纯函数2、redux2.1 redux的基本使用2.2 通过action修改store的数值2.3 订阅state的变化2.4 目录结构2.5 Redux的使用过程2.6 redux的三大原则2.7 Redux官方图 3、redux在React中的使用4、react-redux使用4.1 react-redux的基本使用4.2 异步请求 redux-thunk4.3…

课时26:内容格式化_常用符号解读_终端输出

3.1.2 终端输出 学习目标 这一节&#xff0c;我们从 后台执行、信息符号、小结 三个方面来学习。 后台执行 简介 & 就是将一个命令从前台转到后台执行,使用格式如下&#xff1a;命令 &简单演示 前台执行休眠命令 [rootlocalhost ~]# sleep 4 界面卡住4秒后消失后…

字符串大小比较的方法以及函数的多返回值

1.字符串的大小比较: 按照ASCII码表的值进行比较字符串大小 print(f"abc大于abd,结果为{abc>abd}") #结果为布尔类型False print(f"a大于A,结果为{a>A}") #True print(f"key1大于key2,结果为{key1>key2}") #False 2.函数的多返回值: …

分布式文件系统 SpringBoot+FastDFS+Vue.js

分布式文件系统 SpringBootFastDFSVue.js 一、分布式文件系统1.1.文件系统1.2.什么是分布式文件系统1.3.分布式文件系统的出现1.3.主流的分布式文件系统1.4.分布式文件服务提供商1.4.1.阿里OSS1.4.2.七牛云存储1.4.3.百度云存储 二、fastDFS2.1.fastDSF介绍2.2.为什么要使用fas…

<s-table>、<a-table>接收后端数据

对于 中的 <template #bodyCell“{ column, record }”> &#xff1a; <s-tableref"table":columns"columns":data"loadData":alert"options.alert.show"bordered:row-key"(record) > record.id":tool-config&…

MacOS - M1芯片 Mac 在“恢复”模式中启用系统扩展教程

部分软件需要开启系统扩展才能正常使用&#xff0c;但是默然M1芯片的Mac不能直接打开系统扩展&#xff0c;如下两图。 若要启用系统扩展&#xff0c;您需要在“恢复”环境中修改安全性设置。 若要执行此操作&#xff0c;请将系统关机&#xff0c;然后按住触控ID或电源按钮以开…

MATLAB 1:基础知识

MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。这六种基本的数据类型都是按照数组形式存储和操作的。 MATLAB中还有两种用于高级交叉编程的数据类型&#xff0c;分别是用户自定义的面向对象的用户类类型和Java类类型。 1.1.1数值类…