美文网首页React
React高阶组件链式调用以及装饰器的使用

React高阶组件链式调用以及装饰器的使用

作者: 雨落倾城夏微凉_e861 | 来源:发表于2020-08-06 12:29 被阅读0次

今天写一些React高阶组件的demo(此项目demo基于next.js写的),高阶组件在开发中用的也比较多,熟练使用高阶组件有利于我们封装一些公共的组件。高阶组件其实就是一个函数它接收一个组件作为参数并返回。

开始写我们的代码,创建一个Demo组件,下面写的高阶组件都调用这个组件。

function Demo(props){
    return <div>这是被包裹的组件----WithHoc:{props.name}</div>//通过高阶组件把name传过来
}
//实现一个高阶组件
function WithHoc(Comp){
  const name="这是一个函数高阶组件"
  return function (props) {//保留组件原有的属性
    return <Comp {...props} name={name}></Comp>
  }
}
//可以这样导出
export default WithHoc(Demo)
1.png

高阶组件链式调用

再创建一个高阶组件WithHocTwo这次返回一个类组件,并且重写他的生命周期,让他也作用于Demo组件

//高阶组件2给传入的组件传递一个word属性
function WithHocTwo(Comp){
  return class extends React.Component{
    state = {
      word: ""
    }
    componentDidMount(){
      setTimeout(()=>{
        this.setState({word: "这是一个类高阶组件"})
      },1000)
    }
    render(){
      return(
        <Comp {...this.props} word={this.state.word}></Comp>
      )
    }
  }
}
//在Demo组件中接收word
function Demo(props){
  return <div>这是被包裹的组件----WithHoc:{props.name}----WithHocTwo:{props.word}</div>
}
//修改导出的代码链式调用写法
export default WithHocTwo(WithHoc(Demo))
2.png

装饰器写法

要使用装饰器首先我们要去安装一下依赖包

npm install @babel/plugin-proposal-decorators -S 或
cnpm install @babel/plugin-proposal-decorators -S 或
yarn add  @babel/plugin-proposal-decorators

找到根目录下的.babelrc配置如下代码

{
    "presets": ["@babel/react","next/babel"],
    "plugins": [
        ["import", {
          "libraryName": "antd",
          "style": "css" // `style: true` 会加载 less 文件
        },
        "transform-decorators-legacy"
      ],
    ["styled-components", { "ssr": true, "displayName": false }],
    //添加下面这段代码配置,可以识别解析装饰器
    ["@babel/plugin-proposal-decorators",{"legacy": true }]
  ]
}

装饰器修饰的组件是类组件,装饰器作用于紧挨着他的类组件,放在类组件的上面,一个类组件上面可放多个装饰器,按从上到下顺序执行。
下面修改代码:

//前面高阶组件的代码不变,在Demo组件上面放上装饰器
@WithHoc
@WithHocTwo
//将Demo组件改为类组件
class Demo extends React.Component{
  render(){
    return <div>这是被包裹的组件----WithHoc:{this.props.name}----WithHocTwo:{this.props.word}</div>
  }
}
//使用装饰器后我们就可以直接导出Demo组件了
export default Demo
3.png

一样可以正常展示。

相关文章

  • React高阶组件链式调用以及装饰器的使用

    今天写一些React高阶组件的demo(此项目demo基于next.js写的),高阶组件在开发中用的也比较多,熟练...

  • ES7 装饰器模式的配置

    装饰器模式简介 在使用 React 框架编程中,我们用高阶组件的时候,使用时往往需要用高阶组件函数包裹当前组件来导...

  • 高阶组件

    Hoc(高阶组件) 概念 hoc基本用法 hoc链式调用 hoc装饰器用法 概念 概念: 接受组件, 返回新组件,...

  • React高阶组件

    React高阶组件 在开始聊高阶组件之前我们先来看下高阶函数和高阶组件在形式上的差异: 一、什么是装饰器模式: 要...

  • 高阶组件

    React 高阶组件HOC (Higher-Order Component) 高阶组件是react中重复使用组件逻...

  • react 支持"decorators"装饰器语法

    背景 为了让react项目中的高阶组件支持装饰器语法。下面的步骤基于create-react-app创建的reac...

  • 装饰器

    [TOC] 函数 函数定义 函数调用 高阶函数 嵌套函数 装饰器 装饰器=高阶函数+嵌套函数 基础装饰器 假设有一...

  • 利用 React 高阶组件实现一个面包屑导航

    什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理...

  • 探索Vue高阶组件

    探索Vue高阶组件 高阶组件(HOC)是 React 生态系统的常用词汇,React 中代码复用的主要方式就是使用...

  • 高阶组件装饰器演变过程

    高阶组件装饰器 装饰器整个函数的演变过程如下: ** 注意利用函数式组件进行化简!** 新建src/utils.j...

网友评论

    本文标题:React高阶组件链式调用以及装饰器的使用

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