HOC(Higher Order Components)就是一个函数,传给它一个组件,它返回一个新的组件。

高阶组件:就相当于手机壳,通过包装组件,增强组件功能。

实现步骤:

  • 首先创建一个函数
  • 指定函数参数,参数应该以大写字母开头
  • 在函数内部创建一个类组件,提供复用的状态逻辑代码并返回
  • 在该组件中,渲染参数组件,同时将状态通过prop传递给参数组件
  • 调用该高阶组件,传入要增强的组件,通过返回值拿到增强后的组件,并将其渲染到页面

使用function完成高阶组件定义

// import React, { Component, Fragment } from 'react';
import React, { Component } from 'react';
// Fragment jsx不会解析为html,但是它能当作 顶级元素 相当于vue中的template
// react提供一种简写 <></> /* // 高阶组件是一个函数且 参数 是一个首字母要大写的组件
function withCmp(Cmp) {
// 需要一个类组件且此组件要有返回
return class HocCmp extends Component {
// 渲染
render() {
// let title = this.props.title+'----...'
return (
<>
<h1>头部</h1>
{
// 子组件 通过props传给参数组件
}
<Cmp {...this.props}></Cmp>
<h4>底部</h4>
</>
)
}
}
// 需要返回,返回是一个组件
// return HocCmp
} export default withCmp */ // 高阶组件是一个函数 箭头函数也可以定义一个高阶组件
export default Cmp => {
// 匿名类
return class extends Component {
// 渲染
render() {
return (
<>
<h1>头部</h1>
{
// 子组件 通过props传给参数组件
}
<Cmp {...this.props}></Cmp>
<h4>底部</h4>
</>
)
}
}
}

在App.jsx中使用一个高阶组件

import React, { Component } from 'react'
// Home组件增强一些功能,使用此组件就自带头和尾,但是有时候又可没有
// 对于Home组件使用高阶组件进行包裹
import Home from './pages/Home' // 导入高阶组件 函数
import hocCmp from './hoc/withCmp' let Myhome = hocCmp(Home) export default class App extends Component {
state = {
title: '我是一个标题',
desc: '描述'
} render() {
return (
<div>
{/* 高阶组件 */}
<Myhome state={this.state} />
</div>
)
} }

Home文件

import React, { Component } from 'react';
import withCmp from '../hoc/withCmp'
// import fn from '../hoc/fn'
// 它就是一个函数 装饰器(它是类配套) decorator
@withCmp // 高阶组件传参数
// @fn('aaa','bbb')
class Home extends Component {
render() {
return (
<div>
{this.props.title}
我是一个组件
<hr />
{this.props.children}
</div>
);
}
} export default Home;

react 高阶函数的更多相关文章

  1. 通俗理解 React 高阶函数

    定义:高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. A higher-order component is a function that takes a componen ...

  2. react高阶函数组件

    Layout as a Higher Order Component // components/MyLayout.js import Header from './Header'; const la ...

  3. 学习React系列(九)——高阶函数

    定义:高阶组件就是一个函数,且该函数接收一个组件作为参数,并返回一个新的组件. (上一篇已经说过了高阶组件可以用来解决交叉问题) 一.不要改变原始组件,使用组合 class A extends Rea ...

  4. React.js高阶函数的定义与使用

    /* 高阶函数的简单定义与使用 一: 先定义一个普通组件 二: 用function higherOrder(WrappendComponent) { return } 将组件包裹起来,并用export ...

  5. 《React后台管理系统实战 :一》:目录结构、引入antd、引入路由、写login页面、使用antd的form登录组件、form前台验证、高阶函数/组件

    实战 上接,笔记:https://blog.csdn.net/u010132177/article/details/104150177 https://gitee.com/pasaulis/react ...

  6. React事件处理、收集表单数据、高阶函数

    3.React事件处理.收集表单数据.高阶函数 3.1事件处理 class Demo extends React.Component { /* 1. 通过onXxx属性指定事件处理函数(注意大小写) ...

  7. 聊聊React高阶组件(Higher-Order Components)

    使用 react已经有不短的时间了,最近看到关于 react高阶组件的一篇文章,看了之后顿时眼前一亮,对于我这种还在新手村晃荡.一切朝着打怪升级看齐的小喽啰来说,像这种难度不是太高同时门槛也不是那么低 ...

  8. 当初要是看了这篇,React高阶组件早会了

    当初要是看了这篇,React高阶组件早会了. 概况: 什么是高阶组件? 高阶部件是一种用于复用组件逻辑的高级技术,它并不是 React API的一部分,而是从React 演化而来的一种模式. 具体地说 ...

  9. react_结合 redux - 高阶函数 - 高阶组件 - 前端、后台项目打包运行

    Redux 独立的集中式状态管理 js 库 - 参见 My Git 不是 react 库,可以与 angular.vue 配合使用,通常和 react 用 yarn add redux import ...

  10. scala面向对象.高阶函数,柯里化,Actor编程简介

    1.定义一个类 class Person{ //用val修饰的变量是只读属性,有getter但是没有setter val id ="111" //用var修饰的变量既有getter ...

随机推荐

  1. java应用提速(速度与激情)

    简介: 本文将阐述通过基础设施与工具的改进,实现从构建到启动全方面大幅提速的实践和理论. 作者 | 阿里巴巴CTO技术来源 | 阿里开发者公众号 联合作者:道延 微波 沈陵 梁希 大熊 断岭 北纬 未 ...

  2. 浅谈专有云MQ存储空间的清理机制

    简介: 浅谈专有云MQ存储空间的清理机制 在近⼀年的项⽬保障过程中,对专有云MQ产品的存储⽔位清理模式⼀直存疑,总想一探究竟但又苦于工作繁忙.精力有限,直到最近⼀次项⽬保障过程中再次出现了类似的问题, ...

  3. PolarDB for PostgreSQL 内核解读 :HTAP架构介绍

    简介:在 PolarDB 存储计算分离的架构基础上我们研发了基于共享存储的MPP架构步具备了 HTAP 的能力,对一套 TP的数据支持两套执行引擎:单机执行引擎用于处理高并发的 OLTP:MPP跨机分 ...

  4. [Ethereum] Gas Station Network (GSN) eip-1613 与 Gas Relay Network (GRN) eip-1077

    在 Ethereum dapp 中,任何涉及状态改动的交易都需要消耗 Gas,这限制了很多没有钱包或者 ETH 的用户对 dapp 的采用. 理念 让非以太用户能够访问智能合约 (如dapps),允许 ...

  5. dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号

    我在一个 WPF 项目里面,在界面显示应用的版本号,更新到 dotnet 8 的 SDK 之后,发现我的界面布局损坏了.本质上这个破坏性改动和 WPF 没有什么关系,是 dotnet 的 SDK 或编 ...

  6. 探索 WPF 的 ITabletManager.GetTabletCount 在 Win11 系统的底层实现

    本文将和大家介绍专为 WPF 触摸模块提供的 ITabletManager 的 GetTabletCount 方法在 Windows 11 系统的底层实现 本文属于 WPF 触摸相关系列博客,偏系统底 ...

  7. WPF dotnet core 的 Blend SDK Behaviors 库

    之前版本是通过安装 Blend SDK 支持 Behaviors 库的,但是这个方法都是通过引用 dll 的方式,不够优雅.在升级到 dotnet core 3.0 的时候就需要使用 WPF 官方团队 ...

  8. STM32F10X 部分引脚不能使用的问题

    一.概述 说来惭愧,我到现在都没有完整的学习过STM32.接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成.不过好在 ST 的资料还是比较多的,相对也比较简单,基本 ...

  9. CF620E New Year Tree (线段树维护 dfs 序)

    CF620E New Year Tree 题意:给出一棵 n 个节点的树,根节点为 1.每个节点上有一种颜色 ci​.m 次操作.操作有两种: 1 u c:将以 u 为根的子树上的所有节点的颜色改为 ...

  10. Pinely Round 3 (Div. 1 + Div. 2)

    A 构造题,分两种情况考虑 上下都行,左右选一个 左右都行,上下选一个 void solve() { int n; cin >> n; vector<pair<int, int ...