zoukankan      html  css  js  c++  java
  • react 装饰器

    使用装饰器定义

    装饰器是一种函数,写成 @函数名。它可以放在类和类方法的定义前面。react脚手架创建的项目默认是不支持装饰器,需要手动安装相关模块和添加配置文件。

    • 安装相关模块

    npm i -D customize-cra react-app-rewired

    • 修改package.json文件中scripts命令

      "scripts": {

        "start": "react-app-rewired start",

        "build": "react-app-rewired build",

        "test": "react-scripts test",

        "eject": "react-scripts eject"

      }

    • 添加config-overrides.js配置文件

    此文件可以理解为就是webpack.config.js的扩展文件

    const path = require('path')

    const {disableEsLint, addDecoratorsLegacy, override} = require('customize-cra')

     

    const customize = () => (config, env) => {

      config.resolve.alias['@'] = path.join(__dirname, 'src')

     

      return config

    }

     

    module.exports = override(

        disableEsLint(),

        addDecoratorsLegacy(),

        customize()

    )

    fn.js文件

    import React, { Component } from 'react'
    
    // 高阶组件  == 装饰器有参数写法
    // 使用装饰器中有传数据,则需要在回调用再次返回一个函数
    /* export default (...args) => {
      console.log(args);
      return Cmp => {
        return class extends Component {
          render() {
            return <Cmp>几个参数</Cmp>
          }
        }
      }
    } */
    
    /* export default (...args) => Cmp => {
      return class extends Component {
        render() {
          return <Cmp>{args.join('####')}</Cmp>
        }
      }
    } */
    
    /* export default (...args) => Cmp => {
      return function () {
        return <Cmp>{args.join('####')}</Cmp>
      }
    } */
    
    // 高阶组件
    /* export default (...args) => Cmp => () => {
      return <Cmp>{args.join('####')}</Cmp>
    } */
    
    export default (...args) => Cmp => () => <Cmp>{args.join('####')}</Cmp>

    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;

     

     

     使用装饰器

    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    [学习笔记&教程] 信号, 集合, 多项式, 以及各种卷积性变换 (FFT,NTT,FWT,FMT)
    [学习笔记] CDQ分治&整体二分
    [日常] NOIp 2018 滚粗记
    [学习笔记] 模拟退火 (Simulated Annealing)
    [日常] NOIWC 2018爆零记
    [日常] PKUWC 2018爆零记
    [日常] 最近的一些破事w...
    [BZOJ 1877][SDOI2009]晨跑
    [COGS 2583]南极科考旅行
    [日常] NOIP 2017滚粗记
  • 原文地址:https://www.cnblogs.com/ht955/p/14717393.html
Copyright © 2011-2022 走看看