React扩展:fragment、Context

news2025/1/16 8:19:50

目录

1.fragment

fragment标签能包裹其它标签,但最后不会渲染到DOM树上。

import React, { Component, Fragment } from 'react'

export default class Demo extends Component {
  render() {
    return (
      <Fragment>
        <input type="text" />
        <input type="text" />
      </Fragment>
    )
  }
}

通常来说,render函数返回的东西需要用<div></div>包裹。用fragment标签包裹,最后fragment也不会被渲染,相较于前者,能少一对<div></div>。

2.Context

父子组件间通信用props就行,祖组件后代组件之间(间隔不止一代)通信用Context
应用开发中一般不用Context,一般都用它封装React插件。

/src/components/Demo/index.jsx

import React, { Component } from 'react'
import './index.css'

// 创建Context对象
const MyContext = React.createContext();
const {Provider,Consumer} = MyContext
export default class A extends Component {

  state = {username:'tom'}

  render() {
    const {username} = this.state
    return (
      <div className='parent'>
        <div>A组件</div>
        <div>用户名:{username}</div>
        <Provider value={username}>
          <B />
        </Provider>
      </div>
    )
  }
}

class B extends Component {
  render() {
    return (
      <div className='child'>
        <div>B组件</div>
        <C />
      </div>
    )
  }
}

/*
// 类式组件
class C extends Component {
  // 声明接收context
  static contextType = MyContext
  render() {
    return (
      <div className='grandchild'>
        <div>C组件</div>
        <div>从A组件接收到的用户名:{this.context}</div>
      </div>
    )
  }
}
*/

// 函数式组件
function C() {
  return (
    <div className='grandchild'>
      <div>C组件</div>
      <div>从A组件接收到的用户名:
        <Consumer>
          { value =>  `${value}` }
        </Consumer>
      </div>
    </div>
  )
}

/src/components/Demo/index.css

.parent{
  width: 500px;
  background-color: orange;
  padding: 5px;  
}

.child{
  width: 400px;
  background-color: skyblue;
  padding: 5px;
}

.grandchild{
  width: 300px;
  background-color: red;
  padding: 5px;
}

3.组件优化PureComponent

问题:只有当组件的state或props数据发生改变时,才重新render()。
原因:组件中的shouldComponentUpdate()总是返回true
解决:
①重写shouldComponentUpdate()方法,比较新旧state或props数据,有变化返回true,没有返回false
②使用PureComponent,PureComponent重写了shouldComponentUpdate(),只有state或props有变化才返回true,项目中一般使用PureComponent来优化。

4.

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

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

相关文章

Stealth-Persist混合内存系统中持久应用程序的体系结构支持

文章目录crash-consistent applications 崩溃一致性程序摘要一、引言二、背景A.新兴的非易失性存储器B.混合主存储器(HMM)C.页面缓存策略D. 目前的工业HMM系统E. 持久性内存编程模式F.动机三、设计A.设计要求B.设计选项C.Stealth-PersistD.概述E. Stealth-Persist NVM库的比较四…

如何用DWDM射频光纤技术实现200公里外的站点分集

本文概述了大型卫星和数据通信服务提供商如何通过使用DWDM射频光纤解决方案为Ka波段卫星数据传输实施经济高效的位置分集天线安装。 什么是DWDM技术? DWDM是Dense Wavelength Division Multiplexing的缩写&#xff0c;即密集波分复用技术&#xff0c;指的是一种光纤数据传输技…

pytest-需要模块相应的库

1. pytest-需要模块相应的库 文章地址&#xff1a;http://www.pythonck.com/archives/docs/1-2/13-2/13002-2 http://www.pythonck.com/archives/docs/1-2/13-2/13002-2 pytest-断言、跳过及运行 三元表达式&#xff1a;三元表达式又称三目运算符。在python中并没有三元表达式…

数商云SRM供应商系统打造家居建材企业完整电商数据生态平台

随着5G、物联网、大数据、人工智能、云计算等技术的快速发展&#xff0c;全球科技不断突破创新&#xff0c;推动了整个社会的智能化发展&#xff0c;同时&#xff0c;也带动了包含家居业在内的制造行业的技术创新、产品更迭以及更加精细化的经营管理。 数字经济时代&#xff0…

代替塞规的高精度孔径测量方法——泊肃叶压差法

摘要&#xff1a;针对现有压力衰减法孔径测量中存在的基本概念不清和实施方法不明确等问题&#xff0c;本文详细介绍了压力衰减法的孔径测量基本原理&#xff0c;并重点介绍压差法测量中的高精度压力控制方法&#xff0c;为各种微小孔径和等效孔径的准确测量提供切实可行的解决…

EOF的实际含义

在学习C语言的时候&#xff0c;遇到的一个问题就是EOF。 它是end of file的缩写&#xff0c;表示"文字流"&#xff08;stream&#xff09;的结尾。这里的"文字流"&#xff0c;可以是文件&#xff08;file&#xff09;&#xff0c;也可以是标准输入&#x…

Linux tracepoint 简介

文章目录前言一、跟踪点的目的二、跟踪点的使用2.1 简介2.2 DECLARE_TRACE三、TRACE_EVENT参考资料前言 本文提供了如何在内核中插入跟踪点并将 probe functions 连接到它们的示例&#xff0c;并提供了一些 probe functions 的示例。可以在不创建自定义内核模块的情况下使用跟…

高可用 Canal集群( 秒懂 + 史上最全)

文章很长&#xff0c;而且持续更新&#xff0c;建议收藏起来&#xff0c;慢慢读&#xff01;疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 &#xff1a; 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

工控安全-Modbus协议

文章目录一、什么是Modbus协议二、Modbus通信过程三、Modbus存储区四、Modbus协议类型4.1 Modbus RTU协议4.1.1 Modbus报文帧结构4.1.2 主机对从机读数据操作4.1.3 主机对从机写数据操作4.1.4 10功能码数据解析4.1.5 总结4.2 Modbus ACSII协议4.3 Modbus-TCP4.4 Modbus-PLUS一、…

SecXOps 关键技术 模型更新

模型更新 定义内涵 本节的模型更新是指在模型训练完成并正式上线后&#xff0c;由运维人员采集并提供新的数据对 原有模型进行再训练、更新参数的过程。 技术背景 随着时间的推移&#xff0c;由于周期性事件、突变等状况的发生&#xff0c;当下的数据集和之前用于训练 模型…

Anaconda开发环境

Anaconda开发环境 Anacanda是一个基于数据分析和机器学习的集成环境&#xff08;给我们集成好了数据分析和机器学习对应的各种环境和模块&#xff09; jupyter&#xff1a;就是Anaconda这个集成环境提供的一个基于浏览器可视化的编码工具。 注意事项&#xff1a;在环境搭建的…

如何在 iOS、MacOS 上使用 ChatGPT 和适用于 iPhone 的最佳 ChatGPT 应用程序

目录 什么是聊天 GPT&#xff1f;如何在我的 iPhone 上使用 ChatGPT&#xff1f;适用于 iPhone 的最佳 ChatGPT 应用程序 在过去的几周里&#xff0c;出现了许多 ChatGPT 应用程序和网站。如果您想了解什么是 ChatGPT、如何在 iOS 上使用它以及适用于 iOS 的最佳 ChatGPT 应用…

Dockerfile介绍及常用保留指令

从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习? 1:DockerFile是什么? 2:DockerFile构建过程解析 3:常用的保留字指令 4:案例及小总结。如下图: dockerFile是什么? DockerFile是用来构建Docker镜像…

RV1126笔记五:人脸识别方案<三>

若该文为原创文章,转载请注明原文出处。 一、介绍 通过图片形式,解析图片数据,检测图片上有没有存在人脸,提取人脸特征,把特征数据保存到数据库里。 二、流程图 使用的是Rock-X AI组件库。 三、数据库的使用 在前面,交叉编译了Sqlite3,把编译的库和可执行文件拷贝…

C++:类和对象:多态

1&#xff1a;多态的基本概念 多态就是指多种状态&#xff0c;它是 C面向对象三大特性之一。 多态分为两类 1&#xff1a;静态多态&#xff1a;函数重载和运算符重载。 2&#xff1a;动态多态&#xff1a;派生类和虚函数实现运行时多态。 静态多态和动态多态区别&#xff1a; 1…

set(关联性容器)

众所周知,不会set的人就不会c(你自己编的吧!),到底什么是set呢?我们今天就来了解一下set的奥秘. set是啥 set 作为一个容器也是用来存储同一数据类型的数据类型&#xff0c;并且能从一个数据集合中取出数据&#xff0c;在set 中每个元素的值都唯一&#xff0c;而且系统能根据…

Nacos学习笔记 (5)Nacos整合SpringBoot流程

前提&#xff0c;先下载Nacos并启动 Nacos Server。 1. Nacos 融合 Spring Boot 为注册配置中心 实现&#xff1a; 通过 Nacos Server 和 nacos-config-spring-boot-starter 实现配置的动态变更&#xff1b;通过 Nacos Server 和 nacos-discovery-spring-boot-starter 实现服…

16、Mysql高级之锁问题

16、Mysql高级之锁问题 文章目录16、Mysql高级之锁问题1、锁概述2、锁分类3、Mysql 锁4、MyISAM 表锁4.1 如何加表锁5.2.2 读锁案例4.3、写锁案例4.4、结论4.5、查看锁的争用情况5、InnoDB 行锁5.1、行锁介绍5.2、背景知识5.3、InnoDB 的行锁模式5.4、案例准备工作5.5、行锁基本…

机器学习模型-BUPA liver disorders-探索饮酒与肝炎关系(论文,科研,医疗信息化诊断系统用)

肝炎是由细菌、病毒、寄生虫、酒精、药物、化学物质、自身免疫等多种致病因素引起的肝脏炎症的统称。儿童及成年人均可患病&#xff0c;病毒感染导致的病毒性肝炎较为常见。 过渡饮酒是肝炎重要因素 过渡饮酒会引发下述血检指标异常&#xff0c;暗示肝炎发生。 酒精相关性肝病…

使用Nordic的nrf52840实现蓝牙DFU过程

需要用到的软件&#xff1a; 交叉编译环境&#xff1a;gcc-arm-none-eabi MinGW&#xff1a;下载 Python&#xff1a;下载 micro-ecc源码&#xff1a;下载 nRFUtil&#xff1a;下载或者直接使用python的pip来安装 手机app&#xff1a;nRF Toolbox或者nRF Connect 安装 gcc-…