React 使用ES7装饰器 Decorator
为什么要使用装饰器,因为在高级组件中,我们不想多级嵌套,看上去很麻烦,也很头疼,例如,我们看一下下面的例子
要注意, 使用装饰器, 使用者必须要用class才行
一、安装相关依赖
yarn add @babel/plugin-proposal-decorators react-app-rewired customize-cra -S
二、项目的根目录下建立一个 config-overrides.js
const { override,addDecoratorsLegacy } = require('customize-cra') module.exports = override( addDecoratorsLegacy() );
三、改package.json
"scripts": { "start": "react-app-rewired start", }
src/components/One/index.js
import React, { Component } from 'react' import Hoc from '../Hoc' @Hoc class One extends Component { render() { return ( <div> 我是被HOC包裹的子组件 One </div> ) } } export default One
src/components/Hoc/index.js
import React from 'react' export default (Com) => { return class extends React.Component { render () { return <div>版权 包裹 <Com {...this.props} /> 包裹 </div> } } }
这样每一个用Hoc 装饰器的组件都会带有版权
但是这样的使用不能给装饰器传参,如果需要传参那么使用下面的方法:
接受参数
import React from 'react' /** * 使用函数柯里化, 才可以传参 */ export default (prop) => (Com) => { return class extends React.Component { render () { return <div>版权 包裹 <div>{prop.value}</div> <Com {...this.props} /> 包裹 </div> } } }
传参
@Hoc({value:'|我是传来的参数|'})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现