• React 使用ES7装饰器 Decorator


    为什么要使用装饰器,因为在高级组件中,我们不想多级嵌套,看上去很麻烦,也很头疼,例如,我们看一下下面的例子

    要注意, 使用装饰器, 使用者必须要用class才行

    一、安装相关依赖

    yarn add @babel/plugin-proposal-decorators  react-app-rewired customize-cra -S

    二、项目的根目录下建立一个 config-overrides.js

    const { override,addDecoratorsLegacy } = require('customize-cra')
    module.exports = override(
       addDecoratorsLegacy()
    );

    三、改package.json

     "scripts": {
        "start": "react-app-rewired start",
      }

    src/components/One/index.js

    import React, { Component } from 'react'
    import Hoc from '../Hoc'
    @Hoc
     class One extends Component {
        render() {
            return (
                <div>
                   我是被HOC包裹的子组件 One
                </div>
            )
        }
    }
    export default One

    src/components/Hoc/index.js

    import React from 'react'
    
    export default (Com) => {
      return class extends React.Component {
        render () {
          return <div>版权 包裹
            <Com {...this.props} />
            包裹
          </div>
        }
      }
    }

    这样每一个用Hoc 装饰器的组件都会带有版权


    但是这样的使用不能给装饰器传参,如果需要传参那么使用下面的方法:

    接受参数

    import React from 'react'
    
    /** 
     * 使用函数柯里化, 才可以传参
    */
    export default (prop) => (Com) => {
      return class extends React.Component {
        render () {
          return <div>版权 包裹
            <div>{prop.value}</div>
            <Com {...this.props} />
            包裹
          </div>
        }
      }
    }

    传参

    @Hoc({value:'|我是传来的参数|'})
  • 相关阅读:
    cogs 908 校园网
    植保___农药基础知识
    底层终端-.c文件之间的调用
    指针复习
    电子工程世界
    电机与维修
    航拍部分
    系统集成与维修
    关于大型架构数据库和web一步一步优化草案
    服务器安装git,如何以秘钥方式提交
  • 原文地址:https://www.cnblogs.com/it-Ren/p/14672586.html
Copyright © 2020-2023  润新知