React原理 - React New Feature

news2024/10/7 20:30:20

目录

扩展学习资料

React Fragments/Portals/StrictMode【糖果】

Fragments【并列元素外包裹一个伪元素】

Portals【改变组件挂载节点】

Strict Mode【严格模式,老工程中使用,提示即将失效方法】

React Concurrent Mode【大招】

不可阻断渲染/可中断的渲染

Concurrent Mode API 【react v16.13.1】不稳定

练习


探寻React新版本带来的新技能

扩展学习资料

名称

链接

concurrent-mode 文档

Introducing Concurrent Mode (Experimental) – React

fragment 文档

Fragments – React

Portal 文档

Portals – React

React Fragments/Portals/StrictMode【糖果】

新版带来的新功能,可以提高我们的开发体验,解决一下曾经让我们困扰的一些问题,有利于开发。

Fragments【并列元素外包裹一个伪元素】


  • 通常在render方法中需要返回一堆元素。需要在并列元素外面包裹一个元素(div)。
  • 导致我们每新增一个组件就会多一层div,特别是这一层包裹毫无意义,除了满足语法要求。
  • 新版本React提供了Fragments组件,并不会生成多与元素。
  • render() { return [] }可以返回数组 // 在列表时候可以采用数组,比较符合语义化

 

import React, {Component, Fragment} from 'react'
class AppWithFragment extends Component {
    render() {
        return (
            <Fragment> // 简写<>
            	<div className="app-item">云</div>
             	<div className="app-item">云1</div>
             	<div className="app-item">云2</div>
            </Fragment> // 简写</>      
        )    
    }
}
class AppReturnArray extends Component {
    render() {
        return [
            	<div className="app-item">云</div>,
             	<div className="app-item">云1</div>,
             	<div className="app-item">云2</div>,
            ]   
        )    
    }
}
class AppWithoutFragment extends Component {
    render() {
        return (
            <div>
            	<div className="app-item">云</div>
             	<div className="app-item">云1</div>
             	<div className="app-item">云2</div>
            </div>        
        )    
    }
}

Portals【改变组件挂载节点】


React提供了一个能让改变挂载节点的API。通常的开发中,组件会挂载在其最近的父节点上。在某些特定的需求上,需要挂载在特定的节点上。

  1. 之前的做法是封装成方法,而不是在render中引入。
  2. 既想在render中引入,又能自定义挂载节点就需要PortalsAPI。
const mountDom = document.querySelector('#other-app');
class CustomComponent extends Component {
    componentDidMount() {
        // 伪代码    
    }
    render() {
        return createPortal(// 将<OtherComponent />挂载到节点MountDom上
            <OtherComponent />,
            mountDom,      
        )     
    }
}

 

import React, { Component } from 'react';
import { createPortal } from 'react-dom';
export default class PortalComponent extends Component {
  constructor(props) {
    super(props);
    const mount = document.createElement('div');
    mount.id = 'mount';
    this.mountNode = mount;
  }
  componentDidMount() {
    // const mount = document.querySelector('#mount');
    document.body.appendChild(this.mountNode);
  }
  render() {
    return createPortal(
      <div>
        Portal Child
      </div>,
      this.mountNode
    );
  }
};

Strict Mode【严格模式,老工程中使用,提示即将失效方法】


Strict Mode提供一个可以显示潜在问题的组件。

  1. 检测是否使用即将废弃的生命周期函数。
  2. 检测是否使用string ref 和 findDOMNode 以及 老版的context api。
  3. 检测是否多次调用不可预测的副作用。
  4. 会有两次render()
class AppWithStrictMode extends Component {
    constructor(props) {
        super(props);
        this.state = {
            list: [],        
        };    
    }
    render() {
        return (
            <StrictMode>
            // render() 执行2次
            	<div ref="btn">提交</div>
            </StrictMode>        
        );    
    }
}

React Concurrent Mode【大招】

  • 一个还在实验阶段的特性;
  • 目的:让React应用能够更好地响应交互并且还能根据用户设备的硬件性能和网络条件进行对应的调节。

如果说Fiber是让应用更好的更新,那Concurrent就是让应用在体验上再上一个台阶。

不可阻断渲染/可中断的渲染

Blocking Rendering


  • 当前React在更新时,包括创建一个新的DOM节点或者是现有DOM节点的移动,这些过程是不能被阻断的,一旦开始执行,就会执行到完成为止。

Interruptible Rendering


  • 在Cobcurrent模式下,渲染更新是可以被中断的。特别是当渲染的过程特别耗时的时候,中断渲染来响应用户的行为,会让整个应用的体验得到提升。

Concurrent Mode API 【react v16.13.1】不稳定

让用户得到更好的视觉、产品体验

  • 开启Concurrent模式
    • createRoot
    • createBlockingRoot
  • Suspense
    • Suspense 【loading展示】
<Suspense fallback={<h1>Loading...</h1>}>
    <div />
</Suspense>
  • SuspenseList【Suspense loading展示s】
<SuspenseList revealOrder="forwards">
    <Suspense fallback={<h1>Loading...</h1>}>
        <div id={1} />
    </Suspense>
    <Suspense fallback={<h1>Loading...</h1>}>
        <div id={2} />
    </Suspense>
    ...
</SuspenseList>
    • useTransition 【写在离开页面的位置,当用户离开/跳转页面,当前页面请求停止】
    • useDeferredValue【平常一些搜索,给定时间内,不检索搜索历史;字符串输入中,检索延迟】

React 16.6之后Suspense配合React.lazy使用已经可以做客户端懒加载。服务端的懒加载,暂时还不能实现

React目前是在用Legacy Mode

Blocking Mode【预计是在v17.x】版本是可以使用部分Concurrent Mode 的API 【包括服务端渲染,包括一些批量处理】

练习

【题目1】用 React Suspence API 与 React Lazy API 构建一个动态加载的单页面应用;

 

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

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

相关文章

【广州华锐互动】煤矿设备AR远程巡检系统实现对井下作业的远程监控和管理

煤矿井下作业环境复杂&#xff0c;安全隐患较多。传统的巡检方式存在诸多弊端&#xff0c;如巡检人员难以全面了解井下情况&#xff0c;巡检效率低下&#xff0c;安全隐患难以及时发现和整改等。为了解决这些问题&#xff0c;提高煤矿安全生产水平&#xff0c;越来越多的企业开…

C#winform自定义软键盘

软键盘应用 触摸一体机没有硬件键盘&#xff0c;系统软键盘占面积大&#xff0c;位于屏幕底部&#xff0c;点击不是很方便。某些时候只需要输入数字&#xff0c;这时弹出九宫格数字键盘就足够了。 以下实现的是弹出一个弹窗作为软键盘。 实现 创建一个窗体FrmSoftKey&#xf…

【Git-Exception】Git报错:fatal: unable to auto-detect email address

报错信息&#xff1a; *** Please tell me who you are. Run git config --global user.email “youexample.com” git config –global user.name “Your Name” to set your account’s default identity. Omit --global to set the identity only in this repository. fatal…

JVM:JIT实时编译器

一、相关 ⾼级编程语⾔按照程序的执⾏⽅式分为两种 编译型&#xff1a;一次性将代码编译为机器码解释型&#xff1a;通过解释器一句一句的将代码解释为机器码之后&#xff0c;再运行。每个语句都是执行的时候才翻译。 JAVA代码执行过程 &#xff08;编译阶段&#xff09;首先将…

SAP 物料主数据屏幕增强

增强步骤 1.为主表添加一个附加结构 根据业务需求新建一个结构&#xff0c;结构中放入需要增强的屏幕字段并激活。 打开事务代码SE11&#xff0c;在需要保存的主表中添加这个附加结构并激活。 注&#xff1a;根据业务需求及屏幕增强的视图判断需要保存的主表是哪张&#xff…

AutoSar Com模块

文章目录 Com模块功能通信传输控制整体 communication 结构Signal 发送流程设置信号的 UpdateBit信号的超时处理信号的传输方式 Signal 发送时序图Signal 接收流程接收信号的 UpdateBit Signal 接收时序图Com_TxPduInfo / Com_RxPduInfo、Com_PduGrpVector 数据来源Com_TxSigGr…

二维码生成点击按钮展示二维码

使用HBuider 1.先安装插件 &#xff08;地址 : https://ext.dcloud.net.cn/plugin?id1287&#xff09; 这里直接就安装到了uni-modules里面了 2、引入 import uQRCode from ‘/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue’ 3、代码实现 <template…

下载git

1.官网下载可能会有访问失败 2.用其他的镜像源下载 快 准 狠 CNPM Binaries Mirror

python3 简易 http server:实现本地与远程服务器传大文件

在个人目录下创建新文件httpserver.py &#xff1a; vim httpserver.py文件内容为python3代码&#xff1a; # !/usr/bin/env python3 import datetime import email import html import http.server import io import mimetypes import os import posixpath import re import…

1200V的SiC - Trench - MOSFET的性能和耐久性

标题&#xff1a;Performance and Ruggedness of 1200V SiC - Trench - MOSFET 摘要 本文介绍了一种新颖的SiC沟槽MOSFET概念。该器件旨在平衡低导通损耗和Si-IGBT类似的可靠性。介绍了45 mΩ/1200 V CoolSiCTM MOSFET的静态和动态性能以及短路能力的基本特点。在状态电阻的有…

JAVA数组、String与集合详解

目录 1. 数组 1.1 初始化 1.2 遍历 1.3 数组执行原理 1.4 Arrays操作数组 2. String字符串 3. 集合 3.1 Collection 3.1.1 常用方法 3.1.2 分类 3.1.3 遍历方式 3.1.4 List 3.1.5 Set 3.1.6 适用场景 3.1.7 Collection总结 3.2 Collection其他操作 3.2.1 并发修…

系统配置与性能评价

系统配置与性能评价 考点概况性能指标性能评价方法阿姆达尔解决方案 考点概况 性能指标 标红的常考 了解性能指标对应哪一个的 性能指标是干嘛的 网络和路由器都有吞吐量&#xff0c;优先选择网络 d 数据处理速度&#xff1a;PDR c D A 根据选项去选择最合适的就行 B和D都是网…

把DTC从Excel导入cdd的方法

本文是基于CANdelaStudio12.0讲解 问题一&#xff1a;当导入DTC的xxx.cdi文件报如下红色错误 可能原因&#xff1a;在设置具有下拉框的属性的内容时&#xff0c;输入的内容不在下拉框列表中 解决办法:在.cddt文件中更新“”Error Code Table“”内容&#xff0c;把新的选项更新…

Matlab信号处理2:方波信号的合成与分解

周期信号可展开为傅里叶级数&#xff0c;因此方波信号可用若干谐波去拟合。以下是Matlab的实现&#xff1a; %% 方波信号的分解% 1.生成方波信号 % 方波信号周期、基波频率 T0 2; w0 (2 * pi) / T0; % 方波信号值为1的区间 T1 0.5; % 绘图周期&#xff1a;(2*n1)个周期 n …

SpringBoot项目--电脑商城【用户注册】

1.创建数据表 1.1 创建t_user表 CREATE TABLE t_user (uid INT AUTO_INCREMENT COMMENT 用户id,username VARCHAR(20) NOT NULL UNIQUE COMMENT 用户名,password CHAR(32) NOT NULL COMMENT 密码,salt CHAR(36) COMMENT 盐值,phone VARCHAR(20) COMMENT 电话号码,email VARCH…

S7-1500/ET200MP 使用 TIA STEP7 进行自由口通讯

1. 硬件列表 2. 组态和配置 1) 新建项目 2) 创建CPU1500站点 3) 组态CM PtP 串口 4) 设置协议自由口 3. 编写通信程序 1) 逻辑地址的填写 2) 调用发送接收功能块 3) 创建发送DB块和接收DB块 4. 设备连接 5. 通信测试 1) 设置串口调试调试软件SSCOM32 2)…

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网&#xff0c;来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器&#xff0c;它的 MIMO 是 22&#xff0c;也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…

[hpsupport@privatemail.com].Elbie勒索病毒的最新威胁:如何恢复您的数据?

引言&#xff1a; 随着技术的不断发展&#xff0c;网络犯罪分子也在不断进化和改进他们的方法&#xff0c;其中之一就是恶名昭著的勒索病毒。最近&#xff0c;出现了一种新的威胁&#xff0c;名为 [ hpsupportprivatemail.com ].Elbie 勒索病毒。让我们一起深入探索这个威胁&am…

拥抱国产化,生态软件信创兼容适配之路

国产化是指技术引进项目投产后所生产的产品中&#xff0c;国内生产件的数量占整件产品生产件数量。换句话说&#xff0c;软件国产化的占比&#xff0c;直接影响到技术是否会在某一个时点上被”卡脖子“。 随着国家经济的发展和技术水平的提高&#xff0c;国家整体实力大大增强…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…