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

    右侧赞助一下 代码改变世界一块二块也是爱
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号