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;

     

     

     使用装饰器

    右侧打赏一下 代码改变世界一块二块也是爱
  • 相关阅读:
    优化MyBatis配置文件中的配置
    Java多线程---同步与锁
    Runtime.getRuntime().exec()
    java ---线程wait/notify/sleep/yield/join
    redis配置详情
    httpcline
    线程
    Bootstrap学习(一)
    springmvc注解配置
    salesforce上上传和导出.csv格式文件
  • 原文地址:https://www.cnblogs.com/ht955/p/14717393.html
Copyright © 2011-2022 走看看