使React支持装饰器语法

让react项目支持"decorators"装饰器语法 写在前面;最近在学习ESNext,当学习到装饰器部分时,就需要让项目支持装饰器语法,但是在网上搜索了一番,没有让我成功的。幸好在各种摸索中,我最终还是成功。于是我写下这篇文章,希望对需要它的人有所帮助,同时也是当作自己的一篇笔记。 此次配置我是在react项目中进行配置的,目的是让react项目中的高阶组件支持装饰器语法,当然让它能与mobx配合使用也是我的目的之一。 具体步骤: 一.新建reac... 阅读详情

非装饰器写法

下面这种链式调用写起来很麻烦,调用层级多的话,代码阅读性也会很差,ES7的装饰器语法可以解决这个问题

import React from 'react';

const CompOne = Comp => {
  return props => {
    return <Comp {...props} attrOne='comp1'></Comp>
  }
}
const CompTwo = Comp => {
  return props => {
    return <Comp {...props} attrTwo='comp2'></Comp>
  }
}
function App(props) {
  return (
    <div className="App">
      <p>{props.attrOne}</p>
      <p>{props.attrTwo}</p>
    </div>
  );
}
// 组件的链式调用
export default CompTwo(CompOne(App));

如何支持装饰器语法

  1. 安装依赖

    yarn add customize-cra
    

    如果Babel==6.x,安装

    yarn add babel-plugin-transform-decorators-legacy -D
    

    如果Babel>=7.x,安装

    yarn add @babel/plugin-proposal-decorators -D
    

    新项目都是7的版本,要是不放心,两个都装应该也行,但是本人没验证过

  2. 配置 config-overrides.js

    配置好之后要重启,不然可能会报错

    const { override, addBabelPlugins } = require('customize-cra');
    
    module.exports = override(
      // 支持装饰器
      addBabelPlugins( 
        [
          '@babel/plugin-proposal-decorators',
          {
            legacy: true
          }
        ]
      )
    );
    

装饰器写法

装饰器语法只支持用class声明的组件,不支持函数式组件,如下图,使用报错

在这里插入图片描述
改写后:

import React, { Component } from 'react';

const CompOne = Comp => {
  console.log('CompOne被调用了');
  return props => {
    return <Comp {...props} attrOne='comp1'></Comp>
  }
}
const CompTwo = Comp => {
  console.log('CompTwo被调用了');
  return props => {
    return <Comp {...props} attrTwo='comp2'></Comp>
  }
}

// 多个装饰器自下而上执行
@CompTwo // 再执行这个
@CompOne // 先执行这个
class App extends Component {
  constructor(props) {
    super(props)
  }
  render() {
    return (
      <div>
        <p>{this.props.attrOne}</p>
        <p>{this.props.attrTwo}</p>
      </div>
    )
  }
}

export default App;

Vscode中,使用装饰器会出现红线,这只是编辑器报错,不影响编译
在这里插入图片描述
解决方法:

Settings 中搜索 Experimental Decorators,勾选即可

在这里插入图片描述

浏览器打印结果

在这里插入图片描述

REACT 项目中使用LESS,以及支持装饰器语法模式配置CRACO.CONFIG.JS配置 本文章向大家介绍react 项目中使用less,以及支持装饰器语法模式配置craco.config.js配置,主要包括react 项目中使用less,以及支持装饰器语法模式配置craco.config.js配置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 一、需要安装的依赖 如果需要使用antd则先执行: yarn add antd 安装craco yarn add @craco/craco 安装less插件 yarn add cra.. 阅读详情

相关推荐

RK平台MPP编解码实战:从源码编译到性能测试全解析

本文详细解析了在RK(瑞芯微)平台上进行MPP(Media Process Platform)多媒体编解码实战的全过程。从源码获取、交叉编译环境搭建、常见编译问题排查,到测试程序的修改调试与性能测试分析,提供了从零到一的完整指南。文章通过实测数据展示了MPP硬件编解码在嵌入式设备上的高性能与低功耗优势,帮助开发者快速掌握这一关键技术,应用于智能摄像头、视频会议终端等产品开发。

weixin_28273593的博客 544

React 中 TypeScript 和装饰器及 Hooks

如果一个函数是永远也执行不完的,就可以定义返回值为never,那什么样的函数是永远也执行不完的那?我们先来写一个这样的函数(比如执行执行的时候,抛出了异常,这时候就无法执行完了)。TypeScript 是强类型语言,相对于JavaScript 弱类型语言,它具有类型检测的功能,扩展了JavaScript 的语法。当我们没有定义类型时,TS 会自动实现一个类型推断的过程,当 TS 无法类型推断时,需要手动使用类型注解。赋值的类型、位置、个数需要和定义(声明)的类型、位置、个数一致。

Clytza的博客 1732

MATLAB图像去噪实战:如何用巴特沃斯滤波器完美去除横条纹(附完整代码)

本文详细介绍了如何使用MATLAB中的巴特沃斯滤波器有效去除图像中的横条纹噪声。通过频域分析和滤波处理,结合完整的代码示例,帮助读者掌握从噪声分析到参数优化的全流程技术,实现高质量的图像去噪效果。

weixin_30566063的博客 563

React 装饰器的使用

首先我们要知道 为什么要使用装饰器,因为在高级组件中,我们不想多级嵌套,看上去很麻烦,也很头疼,例如,我们看一下下面的例子 有时候我们的值,不得不从另一个地方去拿到的话,就需要高级组件了,来扩充我们的组件,但是这样子写,一直嵌套, 不太容易管理,所以就有了我们ES7语法的装饰器,帮我们解决了很多的麻烦,安装方法和用法 请看下面的例子 要使用装饰器 前提是你要安装一些插件 npm install...

小蜜蜂的博客 6227

CPRI原理及应用--基本原理

本文主要介绍CPRI的基本原理,包括CPRI的发展历程、CPRI基本协议、速率、帧结构、时延模型等

u014035968的博客 2万+

Vmware虚拟机克隆详解:固定ip + 修改uuid等内容

分两大步 设置固定ip 克隆后修改相关配置 本文引用的其他地方的图片。会附上链接 若侵权,删 一、设置静态ip 先进行虚拟网络的编辑 接下来的操作需要管理员权限。(给权限就完事了) 接下来设置网卡: 网络和共享中心→ 更改适配器设置→VMware Network Adapter VMnet8 -> 右键属性 修改TCP/Ipv4的配置,网上常见是这种,笔者是英文的...

Unknownfuture的博客 9070

react配置可使用装饰器语法

1.安装模块 使用cnpm cnpm i @babel/plugin-proposal-decorators customize-cra react-app-rewired -D 或者使用yarn yarn add @babel/plugin-proposal-decorators customize-cra react-app-rewired -D 2.根目录下创建config-overrides.js文件 文件内写入以下代码 // 参考配置连接:https://www.npmjs.com/package

qq_41318044的博客 391

ST-Link V2的隐藏技能:多通道串口调试的终极指南

本文深入探讨了ST-Link V2的多通道串口调试功能,突破传统烧录工具的限制。通过详细的硬件配置、Arduino IDE设置和实战案例,展示了如何利用SWD接口实现多通道数据监控,提升STM32F103C8T6等开发板的调试效率。文章还提供了PCB布局优化和性能调优技巧,助力开发者充分发挥ST-Link V2的潜能。

weixin_29285605的博客 355

装饰器介绍,react使用装饰器

前言 Decorator 是 ES7 的一个新语法,目前仍处于第2阶段提案中,正如其“装饰器”的叫法所表达的,他通过添加@方法名可以对一些对象进行装饰包装然后返回一个被包装过的对象,可以装饰的对象包括:类,属性,方法等。 在使用它之前需要引入babel模块 编译成 ES5 或 ES6。 1. 类的装饰 当装饰的对象是类时,我们操作的就是这个类本身,即装饰器函数的第一个参数,就是所要装饰的目标类。 @decorator class A {} // 等同于 class A {} A = decorator(A

【03】的博客 1518

SAP 针对不同行业(制造业、零售业、金融业)推出了专属的云解决方案,以下是各行业的核心方案与特点

SAP推出行业专属云解决方案:制造业(SAP Digital Manufacturing Cloud)提供AI排产与质量预警,降低缺陷率;零售业(S/4HANA Cloud零售版)实现AI预测补货与全渠道库存同步,减少浪费;金融业(Business ByDesign)支持合规自动化与实时风控,降低审计成本。各方案均采用云原生架构,典型案例显示实施效果显著。

金牌架构师 492

使用OpenCV从低对比度图像中提取圆形轮廓

希望本文能帮助您从低对比度图像中提取圆形轮在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。在本文中,我们将探讨如何使用OpenCV库从低对比度图像中提取圆形轮廓。低对比度图像通常指的是图像中的亮度差异很小,导致物体边缘不够清晰的情况。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。通过预处理图像并应用Hough变换,我们能够在低对比度图像中准确地提取圆形轮廓。

ByteWhiz的博客 350

react项目支持“decorators“装饰器语法

使用@From.create() 报错 解决方法 1.安装decorators依赖 npm install --save-dev @babel/plugin-proposal-decorators 或者 yarn add @babel/plugin-proposal-decorators -D 2. 配置 package.json文件 “babel”: { “presets”: [ “reac...

qq_43661347的博客 200

Python实现将txt文件转换成对应的excel或csv文件

此外,在上面的例子中,txt文件是以“空格”分隔的,如果遇到“逗号”分隔的,只需将上述代码中的。本文是该专栏的第29篇,后面会持续分享python的各种干货知识,值得关注。工作上可能会遇到这样的情况,使用python将某个txt文本,按照。转换成对应的excel文件或者是csv文件。”需要替换成你的目标txt文件的绝对路径。库,这里直接引用就好。需要注意的是,上述代码中的“

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 4506

React的高阶组件装饰器准备工作

安装插件用npm install或是yarn add都行,这里我用yarn add 引入 react-app-rewired yarn add react-app-rewired 安装customize-cra yarn add customize-cra 更改package.json⽂件 "scripts": { "start": "react-app-rewired sta...

uncle_Huang的博客 354

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

react装饰器

安装相关依赖 @hoc//@表示它是一个装饰器函数类似于*hoc表示一个生成器函数 cnpm i @babel/plugin-proposal-decorators//支持装饰器语法 cnpm i react-app-rewired//这个插件可以让不用通过yarn eject 弹射配置文件 cnpm i customize-cra//为了使...

qq_40689037的博客 426

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

React的decorators装饰器报错@

Parsing error: This experimental syntax requires enabling one of the following parser plugin(s): "decorators-legacy", "decorators". 对修饰器的实验支持功能在将来的版本中可能更改。在 "tsconfig" 或 "jsconfig" 中

lfy_wybss的博客 6497

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

create-react-app 配置scss,ant-design,装饰器,代理,node支持最新语法,express es6 后端,链接mongodb

新建一个项目 npm install -g create-react-app create-react-app my-app cd my-app npm i npm start # 或者,npm 5.1版本以上自带npx,以下官方推荐 npx create-react-app my-app cd my-app npm start 暴露配置文件 # 暴露配置文件,输入yes就好 npm eject 下载依赖 # scss依赖 npm install sass-loader node-sass --save

qq_37350725的博客 297

react中使用装饰器

装饰器 decorator 是一种函数,是 Es6 的一个语法糖,是一种与类(class)相关的语法,用来注释或修改类和方法 以@+函数名形式展现,可以放在类和类方法的定义前面 为什么要使用装饰器模式? 在设计模式中讲到优先使用对象而不是类继承,动态的给对象添加一些额外的属性或方法,相比与使用继承,装饰器模式更加灵活 在 React 中,高阶组件是一个非常厉害的东西,它最大的特点就是能够:重用组件逻辑.达到精简代码能力 使用create-react-app创建项目后,它默认是不支持装饰器模式的,需

yinge0508的博客 1492

React 配置装饰器

在React文件做到对装饰器的编译,只需要简单几步弹出webpack配置 npm run eject安装相关依赖 npm install transform-decorators-legacy --save-dev编写.babelrc文件 ​ { "presets": [   "react-app" ], "plugins": [   "transform-decorator...

来者往者 3488

react(关于装饰器的配置)

在react中,大家有的使用装饰器,比如路由,或者mobx等,但是会发现默认脚手架不支持,接下来就说一下怎么配置,网上大部分都是使用npm eject来弹出脚手架的默认配置,但这样并不优雅,社区提供了其他方案来解决修改配置的方式 首先安装,以下几个依赖 customize-cra react-app-rewired @babel/plugin-proposal-decorators yarn add customize-cra react-app-rewired @babel/plugin-p

weixin_43990297的博客 458

在react中用装饰器来装饰connect

假设我们在react中有如下header组件: import React, { PureComponent } from 'react'; import { connect } from 'react-redux'; import actions from './actions'; class Header extends PureComponent{ render(){ ...

dianqi0560的博客 146

在React项目中使用装饰器

React配置装饰器 安装模块 yarn add @babel/plugin-proposal-decorators customize-cra react-app-rewired -D 写配置 在根目录下创建文件 config-overrides.js 在config-overrides.js中编写一下代码 // 参考配置连接:https://www.npmjs.com/package/customize-cra const {override,addDecoratorsLegacy}=requi

weixin_43021311的博客 360

关于react中HOC高价组件中的Cra中装饰器的写法注意点

让cra支持@装饰器写法 1.不管你是要配置什么,我们最好的方式是使用react-app-rewired这个包来对cra创建的项目进行轻微的配 置调整. 2.安装好之后,在package.json里把scripts里的react-scripts替换成react-app-rewired. 3.在根目录下创建一一个config-overrides.js module.exports = (...

st521314mt的博客 429

在react中配置mobx

如何在react中配置mobx 下面介绍两种方法: 1.直接使用custom-react-scripts来创建项目: 输入:create-react-app my-app --scripts-version custom-react-scripts 然后使编辑器(我用的VSCode)支持ES.Next的装饰器语法: 在项目的根路径下创建一个文件jsconfig.json,文件内容为: { “com...

q1312882392的博客 504

cra显目下使用装饰器

安装 npm run eject npm install @babel/plugin-proposal-decorators 在package.json文件的babel下配置 "babel": { "plugins": [ [ "@babel/plugin-proposal-decorators", { "legacy": true } ] ], "presets": [ "react-app" ] } ...

qq_42975676的博客 246
上一篇: React高阶组件
下一篇: React组件间的Context传值
My_Java_Life
博客等级 码龄11年 39粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值