美文网首页
react-高阶组件

react-高阶组件

作者: 习惯水文的前端苏 | 来源:发表于2021-01-14 15:39 被阅读0次

高阶组件是代码复用的一种实现方式,用以替代mixin,衍生于高阶函数,即接收一个组件并返回一个组件

基本实现(定义一个函数,该函数内返回一个类组件,并在导出时调用)

    新建hoc.js文件并引入button组件

    新建button.js文件

    在组件内引用

那么高阶组件到底能做什么呢?

        \bullet 操作 props

        \bullet 抽离 state

        \bullet 通过 ref 访问到组件实例

        \bullet 用其他元素包裹传入的组件 WrappedComponent

操作props

    我们在return被包装的组件之前,创建一个对象并通过属性的形式传递给被包装组件

    这样我们在组件button当中便能够打印出

(name来源于高阶组件,age来源于引用处)

抽离state或event

       由于是我们返回的是一个类组件,因此它在自己内部可以维护一套自己的state

        我们在向被包装组件添加props时,同时增加对应props的修改接口

        并将接口定义到高阶组件内部

        最后在button组件内点击调用props的onChange方法

        这样一来,我

们就将公共的数据和方法抽离到高阶组件中维护啦

通过ref 访问到组件实例

    我们有时候需要去访问原生dom节点,尽管我们可以通过jquery或者原生domapi去获取,但是这并不是框架所推荐的,此时便需要用到ref去注册引用

    这里拿到的instance便是button组件的实例,进而调用在button组件中定义的属性或方法

    但是我在button组件中去调用invokeRefEvent是没有任何意义的,真正有用的其实是在引用处去访问button的某个方法,可是默认情况下获取的却是我们用于包装的类

    即

    如果我们想在引用处直接操作button组件怎么办呢?答案是refs转发

    我们只需要在返回之前调用指定的React.forwardRef接口向react声明转发ref即可

    这相当于将ref的注册行为向下传递,使其注册到指定组件上

    这样我们在引用处拿到的就是button了

用其他元素包裹传入的组件 WrappedComponent

    这个其实就是在返回组件之前,在外层再包裹一层元素

示例

相关文章

  • react高阶组件

    title: react-高阶组件date: 2018-07-11 09:42:35tags: web 组件间抽象...

  • react-高阶组件

    高阶组件是代码复用的一种实现方式,用以替代mixin,衍生于高阶函数,即接收一个组件并返回一个组件 基本实现(定义...

  • 浅谈 react高阶组件-反向继承

    1. 前言 1.不废话,书接上文react-高阶组件参数[https://www.jianshu.com/p/00...

  • 浅谈 react高阶组件-参数-高阶函数

    1. 前言 1.不废话,书接上文react-高阶组件初识[https://www.jianshu.com/p/08...

  • 03-react-跨组件级通信Context

    react-跨组件级通信- Context 之前编写组件都是通过props或者state的方式来传递组件, 但组件...

  • react-父子组件间通信

    React-父子组件间通信 父组件传 值 给子组件, 传 方法 给子组件 子组件接收 值 ,触发父组件的 方法

  • React-Native 高阶组件

    高阶函数 高阶组件(属性代理)普通组件还可以向高阶组件传值 高阶组件(反向继承) 普通组件的 static 方法怎...

  • React高阶组件HOC

    高阶组件本质是函数,参数是 组件1 返回组件2,高阶组件是为了复用通用逻辑高阶组件eg:import React,...

  • react与vue中高阶组件的对比

    由高阶函数引申出来的高阶组件 高阶组件本质上也是一个函数,并不是一个组件,且高阶组件是一个纯函数。高阶组件,顾名思...

  • 2021-08-05-🦕🦕 react 高阶组件hotc和@装饰

    简介 高阶组件可以直接调用子组件属性方法;子组件通过 this.props.xxx调用高阶组件方法属性 高阶组件无...

网友评论

      本文标题:react-高阶组件

      本文链接:https://www.haomeiwen.com/subject/vtlmvktx.html