react中@withrouter_React系列十 - 高阶组件以及组件补充

2023-11-13

源自:coderwhy

一. 高阶组件

1.1. 认识高阶组件

什么是高阶组件呢?相信很多同学都听说过,也用过 高阶函数,它们非常相似,所以我们可以先来回顾一下什么是 高阶函数。

高阶函数的维基百科定义:至少满足以下条件之一:

  • 接受一个或多个函数作为输入;
  • 输出一个函数;

JavaScript中比较常见的filter、map、reduce都是高阶函数。

那么说明是高阶组件呢?

  • 高阶组件的英文是 Higher-Order Components,简称为 HOC;
  • 官方的定义:高阶组件是参数为组件,返回值为新组件的函数

我们可以进行如下的解析:

  • 首先, 高阶组件 本身不是一个组件,而是一个函数;
  • 其次,这个函数的参数是一个组件,返回值也是一个组件;

高阶组件的调用过程类似于这样:

const EnhancedComponent = higherOrderComponent(WrappedComponent);

高阶函数的编写过程类似于这样:

function higherOrderComponent(WrapperComponent) {  return class NewComponent extends PureComponent {    render() {      return     }  }}

在ES6中,类表达式中类名是可以省略的,所以可以可以写成下面的写法:

function higherOrderComponent(WrapperComponent) {  return class extends PureComponent {    render() {      return     }  }}

另外,组件的名称都可以通过displayName来修改:

修改名称

完整的代码,我们可以这样来编写:

import React, { PureComponent } from 'react';function higherOrderComponent(WrapperComponent) {  return class NewComponent extends PureComponent {    render() {      return     }  }}class App extends PureComponent {  render() {    return (      
        App      
    )  }}export default higherOrderComponent(App);

高阶组件并不是React API的一部分,它是基于React的组合特性而形成的设计模式;

高阶组件在一些React第三方库中非常常见:

  • 比如redux中的connect;(后续会讲到)
  • 比如react-router中的withRouter;(后续会讲到)

在我们的开发中,高阶组件可以帮助我们做哪些事情呢?

1.2. 高阶组件的使用

1.2.1. props的增强

不修改原有代码的情况下,添加新的props

假如我们有如下案例:

class Header extends PureComponent {  render() {    const { name, age } = this.props;    return 

Header {name + age}

  }}export default class App extends PureComponent {  render() {    return (      

我们可以通过一个高阶组件,让使用者在不破坏原有结构的情况下对某个组件增强props:

function enhanceProps(WrapperCpn, otherProps) { return props => }const EnhanceHeader = enhanceProps(Header, {height: 1.88})

利用高阶组件来共享Context

利用高阶组件来共享Context属性

import React, { PureComponent, createContext } from 'react';const UserContext = createContext({  nickname: "默认",  level: -1})function Header(props) {  return (          {        value => {          const { nickname, level } = value;          return 

Header {"昵称:" + nickname + "等级" + level}

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

react中@withrouter_React系列十 - 高阶组件以及组件补充 的相关文章

  • Java并发编程原理与实战课程(叶子猿)

    前4节官网免费看 txt 05线程的状态以及各状态之间的转换详解 mp4 06线程的初始化 中断以及其源码讲解 mp4 07多种创建线程的方式案例演示 一 带返回值的方式 mp4 08多种创建线程的方式案例演示 二 使用线程池 mp4 09
  • Java设计模式——桥接模式

    文章目录 桥接模式 桥接模式 桥接模式就是把事物和其具体实现分开 使他们可以各自独立的变化 桥接的用意是 将抽象化与实现化解耦 使得二者可以独立变化 像我们常用的JDBC桥DriverManager一样 JDBC进行连接数据库的时候 在各个
  • 华为FusionCompute之个人学习环境虚拟化嵌套部署方案

    华为FusionCompute之个人学习环境虚拟化嵌套部署方案 一 环境介绍 1 本次实践背景 2 物理机配置介绍 3 FC虚拟化部署方案介绍 4 虚拟化环境介绍 5 本次实践目的 二 检查本地环境 1 检查虚拟化环境 2 FC部署进度介绍
  • 软考-系统架构师-计算机与网络基础知识-系统性能

    文章目录 1 性能指标 2 性能计算 3 性能设计 4 性能评估 说明 系统性能是一个系统提供给用户的中国性能指标的集合 它包括硬件性能 软件性能 部件性能指标 综合性能指标 1 性能指标 性能指标是软 硬件的性能指标的集成 在硬件中包括计
  • EMC测试的那些项目,你都知道么?

    转载 EMC电磁兼容 2022 03 27 08 30 EMC检测 电磁兼容性检测 的全称是Electro Magnetic Compatibility 其定义为 设备和系统在其电磁环境中能正常工作且不对环境中任何事物构成不能承受的电磁骚扰
  • gethostbyname()函数详解

    基本概念 gethostbyname 函数主要作用 用域名或者主机名获取地址 操作系统提供的库函数 以下的讨论基于linux环境 域名系统 Domain Name System DNS 主要用于主机名字与IP地址之间的映射 每个组织机构往往
  • 【NLP】1、BERT

    文章目录 一 背景 二 方法 论文 BERT Pre training of Deep Bidirectional Transformers for Language Understanding 出处 Google 一 背景 在 BERT
  • flutter图片点击跳转_flutter页面跳转 Route 使用汇总

    一 push方式直接跳转 普通跳转 Navigator push context MaterialPageRoute builder BuildContext context gt Page1 复制代码 带参数跳转和接收参数 Navigat
  • Python习题四

    习题四 1 已知10个学生的成绩为68 75 32 99 78 45 88 72 83 78 请将成绩存放在列表中 请对其进行统计 输出优 100 89 良 89 80 中 79 60 差良 59 0 4个等级的人数 代码 运行 2 利用W
  • 代码质量管理工具:SonarQube常见的问题及正确解决方案

    SonarQube 简介 Sonar 是一个用于代码质量管理的开放平台 通过插件机制 Sonar 可以集成不同的测试工具 代码分析工具 以及持续集成工具 与持续集成工具 例如 Hudson Jenkins 等 不同 Sonar 并不是简单地
  • C#基于串行通讯不同计算机数据库之间数据交换系统(原创作品,送论文查重报告)

    论文编号 C 005 论文题目 基于串行通讯不同计算机数据库之间数据交换系统 开发语言 C 包括内容 论文 可执行程序 源码 答辩ppt 外文翻译 进度表 程序操作演示录像 数 据 库 SQL 论文字数 7000字以上
  • c++ 关于opencv 的基本操作

    读取影像 include
  • 没钱也能创业么?没钱怎样创业?

    一 先说结果不但并不是没钱就不能创业 反而是一切追求完美资本的人 无论有钱没钱 都能够且应当创业 二 界定问题我还在风投领域当上五六年兵线 眼界过上百个各式各样企业和创业者 项目投资总额度过亿人民币 也用掉过他人项目投资帮我的上百万用以创业
  • 组成最大数 华为机试

    题目描述 给定一组非负整数 重新排列它们的顺序使之组成一个最大的整数 示例 输入 10 2 输出 210 输入 3 30 34 5 9 输出 9534330 解题思路 回溯法 代码 package Huawei import java ut
  • Mysql分库分表实战(一)——一文搞懂Mysql数据库分库分表

    由于业务需要 需要对Mysql数据库进行分库分表 故而最近一直在整理分库分表的相关知识 现手上的工作也告一段落了 抽空将自己最近的学习结果转化为博文 分享给大家 本博文打算做成一个系列的 首先是分库分表的理论知识的了解 其次是基于Java编
  • 方差分析中怎么看有无显著性影响_一文带你轻松掌握,重复测量方差分析

    在某些实验研究中 常常需要考虑时间因素对实验的影响 当需要对同一观察单位在不同时间重复进行多次测量 每个样本的测量数据之间存在相关性 因而不能简单的使用方差分析进行研究 而需要使用重复测量方差分析 案例 当前有这样一项关于抑郁症的研究 共有
  • html中%20是什么意思?

    两个空格的话就是两个 20 转载于 https www cnblogs com linsx p 6943985 html
  • shell select用法

    select 是 Bash shell 中的一个命令 用于在终端中创建交互式菜单 select 语法格式如下 select varname in list do command1 command2 done 其中 varname 是一个变量
  • 竞争条件(race condition)

    在一些操作系统中 协作的进程可能共享一些彼此都能读写的公用存储区 这个公用存储区可能在内存中 可能是在内核数据结构中 也可能是一个共享文件 这里共享存储区的位置并不影响通信的本质及其带来的问题 为了理解实际中进程间通信如何工作 我们考虑一个

随机推荐

  • linux下五颜六色的文件——具体含义

    1 有一个伟人说过 Linux下一切都是文件 没错 他说的很对 但是文件又有很多汇总类型 Linux系统中用不同的颜色先大致区分一下 2 LINUX下不同的文件类型有不同的颜色 绿色文件 可执行文件 可执行的程序 红色文件 压缩文件或者包文
  • 【数论基础】—— 二项式定理

    二项式定理 内容 x y n
  • MySQL 使用方法简单教程

    目录 启动MySQL服务器 进入mysql交互操作界面 退出MySQL操作界面 第一条命令 多行语句 使用SHOW语句找出在服务器上当前存在什么数据库 创建一个数据库abccs 选择你所创建的数据库 创建一个数据库表 显示表的结构 查询所有
  • stm32cubemx 多路adc采集

    采用的软件是STM32CUBEMX KEIL5 硬件为stm32F103C8T6 我与原文作者做的区别在于 External Trigger Conversion Edge 我在进行配置的时间没有None选项 我选择的是默认的Regular
  • 线代矩阵相乘笔算的新简捷方法

    本矩阵相乘简捷笔算方法做法与传统本质一样 但对部分人来说这样列式子图更容易记忆和准确计算 O O 2013年12月写 2016年5月23日略修正 摘 矩阵的乘法定义 以前这种笔算方法太麻烦 难以快速看出所得矩阵的行列数或者是容易算少算多了一
  • Raki的NLP竞赛topline解读:NBME - Score Clinical Patient Notes

    Description 当你去看医生时 他们如何解释你的症状可以决定你的诊断是否准确 当他们获得执照时 医生们已经有了很多写病人笔记的练习 这些笔记记录了病人的主诉历史 体检结果 可能的诊断和后续护理 学习和评估写病人笔记的技能需要其他医生
  • MySql 生成自定义格式的编码_并更新保存到表指定的表字段

    生成出来的编码格式例子 YHCF0000000001 YHCF0000000002 YHCF0000000010 YHCF0000000011 mysql sql 获取最大的编码数据 生成新的自定义格式的编码 并更新保存到表指定的表字段 u
  • PHP加密方式

    PHP加密方式分为单项散列加密 对称加密 非对称加密这几类 像常用的MD5 hash crypt sha1这种就是单项散列加密 单项散列加密是不可逆的 像URL编码 base64编码这种就是对称加密 是可逆的 就是说加密解密都是用的同一秘钥
  • Unity3D 5 官方教程:地形设置

    地形工具栏的最后一个工具是设置 设置检视器 设置被提供用于如下描述的一些全局使用和渲染选项 基本地形 属性 功能 Draw 切换地形渲染开关 Pixel Error 在地形贴图 高度图 纹理等等 与生成地形之间的贴图精确度 更高的值为更低的
  • 剑指offer--顺时针打印矩阵

    题目描述 输入一个矩阵 按照从外向里以顺时针的顺序依次打印出每一个数字 例如 如果输入如下矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 2 3 4 8 12 16 15 14 13
  • stop容器

    docker ps 查看所有正在运行容器 docker stop containerId containerId 是容器的ID docker ps a 查看所有容器 docker ps a q 查看所有容器ID docker stop do
  • Google Protocol Buffer 的使用和原理

    Google Protocol Buffer 的使用和原理 刘 明 软件工程师 上海交大电子与通信系 简介 Protocol Buffers 是一种轻便高效的结构化数据存储格式 可以用于结构化数据串行化 很适合做数据存储或 RPC 数据交换
  • 程序设计十二:线上聊天室(网络编程+多线程)

    程序设计十二 网络编程 1 Manager类 使用Manager类实现服务器功能 recv 内部方法接收消息 broadcast 方法向所有用户广播 private chat 方法发送私信 定向转发 chat 方法实现收发消息的完整过程 并
  • R包——maftools可视化神器

    参考 http bioconductor org packages release bioc vignettes maftools inst doc maftools html 目录 介绍 准备 格式转换 总体分析框架 maftools安装
  • 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)

    概述 射频发射器是现代通信的重要组成部分 射频发射器由核心射频组件设计和组装而成 具有多种不同的形式和应用 我们经常想到无线通信中的射频发射器 但这个概念同样适用于有线应用 如有线电视 蜂窝电话 雷达 军事通信 航空电子设备 无线局域网 调
  • 第三节课笔记(条件语句与循环语句)

    条件语句与循环语句 一 数据类型 标准数据类型 Python3中有六个标准的数据类型 Number 数字 支持int float bool complex 复数 Sring 字符串 Python中的字符串用单引号 或双引号 括起来 同时使用
  • 18650锂电池保护板接线图_锂电池保护板的过流保护测试方案

    电池保护板 顾名思义锂电池保护板主要是针对可充电 一般指锂电池 起保护作用的集成电路板 锂电池 可充型 之所以需要保护 是由它本身特性决定的 由于锂电池本身的材料决定了它不能被过充 过放 过流 短路及超高温充放电 因此锂电池锂电组件总会跟着
  • java long 详解_JavaSE之Long 详解 Long的方法简介以及用法

    基本功能 Long 类在对象中包装了基本类型 long 的值 每个 Long 类型的对象都包含一个 long 类型的字段 static long MAX VALUElong 8个字节 最大值2 63 1 十六进制 0x80000000000
  • android Intent启动flag

    android Intent启动flag 分类 android框架 2013 10 30 14 47 1318人阅读 评论 0 收藏 举报 FLAG GRANT READ URI PERMISSION 如果设置这个标记 Intent的接受者
  • react中@withrouter_React系列十 - 高阶组件以及组件补充

    源自 coderwhy 一 高阶组件 1 1 认识高阶组件 什么是高阶组件呢 相信很多同学都听说过 也用过 高阶函数 它们非常相似 所以我们可以先来回顾一下什么是 高阶函数 高阶函数的维基百科定义 至少满足以下条件之一 接受一个或多个函数作