react装饰器

安装相关依赖

@hoc//@表示它是一个装饰器函数类似于*hoc表示一个生成器函数

cnpm i   @babel/plugin-proposal-decorators//支持装饰器语法
cnpm i             react-app-rewired//这个插件可以让不用通过yarn eject  弹射配置文件
 cnpm i             customize-cra//为了使用装饰器 

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

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

改package.json

scripts:{
“start”: “react-app-rewired start”,
“build”: “react-app-rewired build”,
“test”: “react-app-rewired test”,
}

./Hoc/index.js

import React from 'react'

export default (Com)=> {
    return class extends React.Component {
             render(){
                return  <div>版权
                    <Com {...this.props} />
                </div> 
             }
            
    
}
}

./conponent/one/index.js

import React, { Component } from 'react'
import Hoc from '../hoc'
@Hoc
 class One extends Component {
    render() {
        return (
            <div>
            one
                
            </div>
        )
    }
}
export default One

这样每一个用Hoc 装饰器的组件都会带有版权
但是这样的使用不能给装饰器传参,如果需要传参那么使用下面的方法:
Hoc装饰器配置

import React from 'react'
//必须采用函数柯里化
export default (p)=> (Com)=> {
    return class extends React.Component {
             render(){
                return  <div>版权
                {p}
                    <Com {...this.props} />
                </div> 
             }
            
    
}
}

装饰器应用

import React, { Component } from 'react'
import Hoc from '../hoc'
@Hoc("abc")
 class One extends Component {
    render() {
        return (
            <div>
            one
                
            </div>
        )
    }
}
export default One
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值