首页 > 其他 > 详细

react 装饰器

时间:2021-04-29 14:47:32      阅读:120      评论:0      收藏:0      [点我收藏+]

使用装饰器定义

装饰器是一种函数,写成 @函数名。它可以放在类和类方法的定义前面。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;

 

react 装饰器

原文:https://www.cnblogs.com/ht955/p/14717393.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!