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,一经查实,立即删除!

相关文章

【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 数据库设…

Arduino 开发环境

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

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…

分布式文件系统 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…

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

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

MATLAB 1:基础知识

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

Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

洛谷: P9749 [CSP-J 2023] 公路

思路: 贪心思想指的是在对问题求解的时候&#xff0c;总是能做出在当前看来是最好的选择,也就是说&#xff0c;如果要得到整个问题的最优答案&#xff0c;那么要求每一步都能做出最好的选择&#xff08;feihua&#xff09;。 在这道题里面&#xff0c;我们希望在来到第i站的时…

Windows搭建docker+k8s

安装Docker Desktop 从官网下载&#xff0c;然后直接安装即可&#xff0c;过程很简单&#xff0c;一直Next就行。 有一点需要注意就是要看好对应的版本&#xff0c;因为后边涉及到版本的问题。 https://www.docker.com/products/docker-desktop 安装完成&#xff0c;双击图…

【白话前端】快速区分webGL,webGPU,unity3D和UE4

在3D图形渲染的渲染领域&#xff0c;很多友友们对上述概念傻傻分不清&#xff0c;站在前端开发角度&#xff0c;我用简单语言说下&#xff0c;结论在文章最后。 一、四者都能进行3D图形渲染 它们之间有一些区别&#xff0c;下面我将对它们进行简单的区分&#xff1a; WebGPU&a…

探索设计模式的魅力:捕捉变化的风-用观察者模式提升用户体验

设计模式专栏&#xff1a;http://t.csdnimg.cn/U54zu 目录 一、引言 核心概念 应用场景 可以解决的问题 二、场景案例 2.1 不用设计模式实现 2.2 存在问题 2.3 使用设计模式实现 2.4 成功克服 三、工作原理 3.1 结构图和说明 3.2 工作原理详解 3.3 实现步骤 四、 优…

【每日一题】牛客网——链表的回文结构

✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&#xff0c;相互学习…

OpenCV-38 图像金字塔

目录 一、图像金字塔 1. 高斯金字塔 2. 拉普拉斯金字塔 一、图像金字塔 图像金字塔是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说&#xff0c;图像金字塔是同一图像不同分辨率的子图…