高阶组件:本质是一个函数,返回值是一个组件,函数的参数是原生组件,主要是对组件的代码的复用或者是逻辑上的复用,
以及对原始组件上的props和state进行增删改查的操作,也可以对原生组件的进行增强和优化;

高阶组件大致分为两种:

1.主要操作的是props对象和组件的增强

import React, { Component } from 'react';function MyHoc(OldCom) {return class NewCom extends Component {constructor(props) {super(props);this.state = {height: 170}}render() {console.log(this.state, this.props);this.newPorps = {   //创建一个新的props传递到old组件...this.props,happly: "睡觉",sex: "男",height: this.state.height}// delete  删除传递属性;delete this.newPorps.age;// 修改this.newPorps.sex = "女";return (<div><div>我是高阶组件</div>  //可以额外加入新的组件与元素{/* 用绑定语法写成对象展开符 */}<OldCom {...this.newPorps} ></OldCom>  //将新的props传递到oldCom中;</div>);}}}
export default MyHoc;

2 反向继承;
在高阶组件实现新组件新建继承与原始组件,主要是对原始组件的state进行操作,页面增强优化;

function MyHoc2(OldCom) {// 反向继承return class NewCom extends OldCom {// 反向继承对原始组件的state进行操作,进行修改的时候,在componentDidMount生命周期进行修改;// 重写父类生命周期函数;componentDidMount() {this.setState({name: "hello"})}render() {console.log(super.console1());// 渲染劫持:可以通过高阶组件对原始组件的状态和页面模板重新渲染,如果不想渲染一个新的组件,可以直接 return null 不进行渲染, 渲染劫持一般使用在// 需要判断的场景,var isLogin = true;if (isLogin) {// 直接渲染父组件;调用super.render函数进行渲染父组件;return super.render()} else {// 渲染登陆页面return null}}}}export default MyHoc2;

Hooks语法

主要是为了函数式组件提供生命周期和组件状态;通过useState,模拟状态useEffect模拟生命周期函数;

import React, { useState, useEffect } from 'react';// hooks:主要是为了函数式组件提供生命周期和组件状态;通过useState,模拟状态useEffect模拟生命周期函数; export default function User() {console.log(this);  //函数是一个纯函数,为了this指向避免recat指向的问题才会用函数式组件;const [name, setName] = useState("宫本武藏"); //name 就是状态名,返回的是一个数组 参数一状态的初始值,第二个参数可以不穿;const [age, setAge] = useState(200);let a = 3;// 通过useEffect() 模拟生命周期函数,// 参数一是一个回调函数 参数二 不传;useEffect(() => {console.log("组件初始化的时候调用,或者有任何状态更新的时候调用didmout/updated");})//情况2 参数1 :回调函数, 参数二 空数组;useEffect(() => {console.log("组件初始化的时候调用一次,模拟/didmount生命周期");}, [])// 情况三 参数一回调,参数二 指定数据更新的时候触发[name];useEffect(() => {console.log("组件初始化的时候调用一次,只有name状态发生改变的时候触发该函数");}, [name])return (<div>{a}<p>name:{name}</p><p>age:{age}</p><button onClick={() => setName(a++)}>点击报错</button><button onClick={() => setAge(a++)}>asdf</button></div >)
}

react高阶组件和Hooks语法相关推荐

  1. react高阶组件和hooks

    1. react高阶组件 1.1 高阶组件的概念 高阶组件(Higher Order Component,简称:HOC ): 是 React 中用于重用组件逻辑的高级技术, 它本身不是react中的组 ...

  2. react高阶组件、hooks

    1.高阶组件 1.1概念 高阶组件(简称:HOC):是react中用于重用组件逻辑的高级技术,它本身不是react中的组件,而是一个函数.这个函数接受一个react组件作为参数,并返回一个新组件,实现 ...

  3. 「react进阶」一文吃透React高阶组件(HOC)

    一 前言 React高阶组件(HOC),对于很多react开发者来说并不陌生,它是灵活使用react组件的一种技巧,高阶组件本身不是组件,它是一个参数为组件,返回值也是一个组件的函数.高阶作用用于强化 ...

  4. React高阶组件探究

    React高阶组件探究 在使用React构建项目的过程中,经常会碰到在不同的组件中需要用到相同功能的情况.不过我们知道,去这些组件中到处编写同样的代码并不优雅. 在以往,为了解决以上的情况,我们会用到 ...

  5. react 高阶组件hoc使用

    react 高阶组件hoc使用 1. 为什么使用高阶组件 2. 具体使用 2.1原代码: 2.2 使用hoc封装后 1. 为什么使用高阶组件 高阶组件(HOC)是 React 中用于复用组件逻辑的一种 ...

  6. React高阶组件实践

    前言 React高阶组件,即 Higher-Order Component,其官方解释是: A higher-order component is a function that takes a co ...

  7. react实现汉堡_利用 React 高阶组件实现一个面包屑导航

    什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理完成后的 React 组件.React 高阶组件在 React 生态中使用的非常频繁, ...

  8. [react] 高阶组件(HOC)有哪些优点和缺点?

    [react] 高阶组件(HOC)有哪些优点和缺点? HOC 优点 通过传递props去影响内层组件的状态,不直接改变内层组件的状态,降低了耦合度 缺点 组件多层嵌套, 增加复杂度与理解成本 ref隔 ...

  9. react组件类型及深入理解react高阶组件

    React中常见的组件类型及分类: 1.展示组件(Presentational component) 与 容器组件(Container component) 2.类组件(Class component ...

最新文章

  1. C#3.0入门系列(五)-之Where操作
  2. LoadRunner学习笔记一
  3. iOS开发之裁剪圆形头像
  4. 设计模式之 - 代理模式(Proxy Pattern)
  5. Java基础之synchronized的讲解
  6. 新手入门HTML5开发,你必须先搞懂这6个问题
  7. 第10篇 WINDOWS2003服务器 IIS上配置404页面的图文教程
  8. WLAN射频、信道与帧分类
  9. 【TFS 2017 CI/CD系列 - 01】-- Agent篇
  10. 学习wordpress模板制作第一天 函数bloginfo
  11. 安装SQLServer2016出错提示:需要安装oracle JRE7 更新 51(64位)或更高版本2种解决办法.
  12. thinkpad s5黑将摄像头最新驱动_第一款以iOS方式运行的安卓手机:联想新机S5黑科技震撼来袭!...
  13. 如何用 matplotlib 画论文中的CNN结构图
  14. Notelife for Mac(笔记管理工具)
  15. 从跳频技术聊CDMA/WIFI之母海蒂·拉玛传奇的一生
  16. golang中的dns问题
  17. 手机CPU天梯图2021年6月版
  18. GitHub 开源推荐 | mpv - 一个免费、开源、跨平台的多媒体播放器
  19. 用数字描绘中国互联网20年变迁
  20. 海思Hi3515开发板方案使用介绍

热门文章

  1. 小迪安全第14天 web漏洞,SQL注入之类型及提交注入
  2. RewriteEngine RewriteCond |域名后面多了两个斜杠??
  3. 2007年执业护士考试全真模拟试题 答案
  4. Java通过递归解决0-1背包问题的代码
  5. R语言:如何批量导入搜狗词库
  6. Centos6.5系统时间慢8小时解决方案
  7. 【心情】今天看了日全食。。。
  8. 在校大学生为什么要申请专利?
  9. #StringBuilder中的append方法 @FDDLC
  10. 区别动态链接库和静态链接库