React组件写法

2023-11-05

一、傻瓜组件也叫展示组件

负责根据props显示页面信息

聪明组件也叫容器组件

负责数据的获取、处理

优势:

分离工作组件和展示组件,解耦

提高组件的重用行

提高组件的可用性和代码阅读

便于测试与后续的维护

二、深入理解函数组件

函数式组件是一种无状态组件,为了创建纯展示组件,这种组件只根据传入的props来展示,不涉及到要state状态的操作

组件不会被实例化,整体渲染性能得到提升

组件不能访问this对象

组件无法访问生命周期里的方法

无状态只能访问输入的props。同样的props会得到同样的渲染结果,不会有副作用

大部分React代码中,大多数组件被写成无状态的组件,通过简单组合可以构建成其他的组件等,通过多个简单然后合并成一个大应用的设计模式被提倡

import React from 'react'
//新建一个组件页面把组件暴露出去的写法
export default function Fun(){
    return(
        <div>
        函数组件
        </div>
    )
}
//这种写法是在页面内部创建的组件不给外部使用,只供内部页面调用
function Fun(){
    return(
        <div>
        函数组件
        </div>
    )
}

三、class组件的写法

在里面可以写入状态、生命周期、构造函数

import React,{Component} from 'react'
export default class Fun extends Component{
    return(
        <div>
        class组件
        </div>
    )
}

高阶组件--命名with开头

高阶组件属性的添加

编写生命周期

将以上两个高阶组件进行链式调用

实现高阶组件装饰器的写法

高阶组件链式调用的写法看起来比较麻烦也比较难理解

ES7出现了装饰器的语法专门拿来处理这种问题

安装支持装饰器语法的babel编译插件

yarn add --save-dev @babel/plugin-proposal-decorators

更改配置文件代码

 

组件通信之上下文(context)

上下文context有两个角色

Provider数据提供

Consumer数据读取

使用context可以避免通过中间元素传递props导致元素的丢失,

context的设计目的是为了共享对于一个组件树而言是全局的数据

不使用context的情况下的代码

import React,{Component} from 'React';
//创建一个传递的数据源
let store={
    name:'年后',
    from:'hunter'
}
class Info extends Component{
    render(){
        return (
            <div>
                <p>姓名:{this.props.name}</p>
                <p>出处:{this.props.from}</p>
            </div>
        )
    }
}
function TooBar(props){
    return(
        <div>
            <Info {...props}></Info>
        </div>
    )
}
export default class Composition extends Component {
    render() {
        return (
            <div>
                <TooBar name={store.name} from={store.from}></TooBar>
            </div>
        )
    }
}
使用context修正后的代码
import React,{Component} from 'React';
//创建上下文
const XdContext =React.createContext();
const {Provider,Consumer}=XdContext
//创建一个传递的数据源
let store={
    name:'年后',
    from:'hunter'
}
class Info extends Component{
    render(){
        return (
            <Consumer>
            {
            store=>{
            return(
            <div>
                <p>姓名:{store.name}</p>
                <p>出处:{store.from}</p>
            </div>
        )
     }
}
    </Consumer>
)
}
}
function TooBar(){
    return(
        <div>
            <Info></Info>
        </div>
    )
}
export default class Composition extends Component {
    render() {
        return (
            <div>
                <Provider value={store}>
                    <TooBar></TooBar>
                </Provider>
            </div>
        )
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React组件写法 的相关文章

随机推荐

  • 聊聊 cookie 管理那些事

    1 前言 在浏览内核加载网络资源的过程中我们离不开 HTTP 协议 它是在 Web 上进行数据交换的基础 同时也是一种无状态的 client server 协议 这种无状态的属性促使许多端存储技术产生 其中最重要的技术之一就是 cookie
  • 深入理解自增自减运算符,看懂表达式不糊涂

    自增运算符 和自减运算符 在算术表达式中容易造成使用上的错误 主要原因有两点 一是自增运算符和自减运算符在变量前后的位置不一样 其内部逻辑不一样 二是自增运算符和自减运算符只能用于变量 不能用于常量 首先讲解一下自增自减运算符的概念 自增自
  • lcm in qcom

    文章目录 lcm需要生产的相关文件 lcm in lk lcm in kernel 一些注意的事项 其他平台 sdm845 in kernel in uefi lcm需要生产的相关文件 根据fae提供的相关资料去配置自己的 xml文件 如下
  • 电信资源管理系统性能测试总结

    1 电信资源管理系统性能测试总结 陈建慧 2007 7 30 1 1 技术问题与解决方法 1 1 1 Loadrunner JAVA脚本 唯一参数问题 最初采用JNI 调用delphi的DLL JAVA脚本中未使用static synchr
  • ColossalAI-Chat训练手册(RLHF)

    目录 1 什么的RLHF流程 2 环境安装 3 训练 运行 3 1 模型下载 3 1 SFT supervised fine tuning 3 2 训练奖励模型 Training reward model 3 3 RL Training m
  • 将点云数据投影到图像上并生成带有颜色的激光雷达点云:Python实现指南

    1 引言 点云数据在许多应用领域 例如地理信息系统 自动驾驶汽车 机器人 3D建模等领域都有重要应用 这种数据通常是3D空间中的点集 其中每个点都具有三维坐标 但是 通过将点云数据投影到2D图像上并为其添加颜色 我们可以更容易地可视化和分析
  • 安卓开发学习视频!深入浅出Android性能调优,最强技术实现

    前言 找工作还是需要大家不要紧张 有我们干这一行的接触人本来就不多 难免看到面试官会紧张 主要是因为怕面试官问的问题到不上来 那时候不要着急 答不上了的千万不然胡扯一些 直接就给面试官说这块我还没接触到 以后如果工作当中遇到的话我可以很快的
  • Docker 容器监控 - Weave Scope

    Author rab 目录 前言 一 环境 二 部署 三 监控 3 1 容器监控 单 Host 3 2 容器监控 多 Host 总结 前言 Docker 容器的监控方式有很多 如 cAdvisor Prometheus 等 今天我们来看看其
  • 【linux基础9】系统文件的压缩和传输(scp,rsync传输的使用方式和压缩解压方式)

    系统文件的压缩和传输 一 实验环境 二 传输文件 一 基本信息 二 scp命令 一 指令 二 测试 scp远程传输文件 三 rsync命令 一 指令 二 rsync远程同步传输 四 文件的归档压缩 1 文件归档 装进一个箱子里面 2 压缩和
  • Python数据分析之:pandas 的索引方式 data.loc[], data[][]

    文章目录 1 data loc index column 2 data column index 1 data loc index column 使用 loc 第一个参数是行索引 第二个参数是列索引 import pandas as pd
  • java中输出一个字符串中出现次数最多的字符以及次数

    1 先把字符串转化为数组 toCharArray 2 定义一个数组count i 存取每个字符 以及数量 count i 3 计算每个字符 以及值 4 取count的最大值 public class MaxString public sta
  • fortran中use blas95、use f95_precision、use lapack95报错的问题

    fortran中use blas95 use f95 precision use lapack95报错的问题 不废话了 直入正题 这几个模块是mkl中的库 需要点击项目 gt 属性 找到fortran 选择其中的Libraries 选择其中
  • sparkstreaming---pom.xml

  • fifteenth day for learning

    apace虚拟主机功能 一 基于IP地址 1 创建基于IP得网站目录及首页 如 home www html 129 home www html 130 echo 129 gt home www html 129 index html ech
  • ZooKeeper服务器启动流程

    ZooKeeper服务器启动 1 单机版服务器启动 ZooKeeper服务器的启动 大体可以分为下面五个主要步骤 配置文件解析 初始化数据管理器 初始化网络I O管理器 数据恢复和对外服务 流程如下图所示 2 集群版服务器启动 Leader
  • Python中的嵌套循环

    1 什么是嵌套循环 所谓嵌套循环就是一个外循环的主体部分是一个内循环 内循环或外循环可以是任何类型 例如 while 循环或 for 循环 例如 外部 for 循环可以包含一个 while 循环 反之亦然 外循环可以包含多个内循环 循环链没
  • Maven学习笔记十:Maven坐标和依赖(依赖的配置)

    Maven坐标和依赖 依赖的配置 依赖会有基本的groupId artifactId和version等元素组成 其实一个依赖声明可以包含如下的一些元素
  • 诺基亚NoKia 8250维修笔记

    今天从桌底翻出一台诺基亚8250 零几年的老物件 尝试着加电启动 发现无论如何都是按下开机键电流上升到30MA然后回到0 看了下元器件无明显损坏 各电容均正常无击穿现象 正负极无短路 怀疑可能是芯片坏了或者晶振坏了 网上找了相关资料 怀疑可
  • 升级Mac后,连接easyconnect不能访问网页

    升级Mac后 连接运行EasyConnect后 打开网页如下提示代理问题 查看论坛 发现可能是升级Mac后导致的 见链接 关于Mac OS10 15无法使用SSL VPN 的问题预警 根据其中的连接 https bbs sangfor co
  • React组件写法

    一 傻瓜组件也叫展示组件 负责根据props显示页面信息 聪明组件也叫容器组件 负责数据的获取 处理 优势 分离工作组件和展示组件 解耦 提高组件的重用行 提高组件的可用性和代码阅读 便于测试与后续的维护 二 深入理解函数组件 函数式组件是