首先我们要知道 为什么要使用装饰器,因为在高级组件中,我们不想多级嵌套,看上去很麻烦,也很头疼,例如,我们看一下下面的例子


有时候我们的值,不得不从另一个地方去拿到的话,就需要高级组件了,来扩充我们的组件,但是这样子写,一直嵌套, 不太容易管理,所以就有了我们ES7语法的装饰器,帮我们解决了很多的麻烦,安装方法和用法 请看下面的例子

要使用装饰器 前提是你要安装一些插件

npm install --save react-app-rewired customize-cra
npm install --save babel-plugin-import
npm install --save-dev @babel/plugin-proposal-decorators

然后需要将package.json 文件配置改变成

如果想改变端口的话 可以
“start”: “set PORT 9000 && react-app-rewired start”

"scripts": {-   "start": "react-scripts start",+   "start": "react-app-rewired start",-   "build": "react-scripts build",+   "build": "react-app-rewired build",-   "test": "react-scripts test",+   "test": "react-app-rewired test",
}

接下来在根路径创建 config-overrides.js

里面的配置内容 如下

const {override,fixBabelImports, // 按需加载配置函数addBabelPlugins // babel插件配置函数
} = require('customize-cra')module.exports = override(addBabelPlugins( // 支持装饰器['@babel/plugin-proposal-decorators',{legacy: true}]),fixBabelImports('import', { // antd 按需加载libraryName: 'antd',libraryDirectory: 'es',style: 'css'})
)

安装了一下环境后
import { Button } from “antd”;
引入一下就可以直接的使用antd的按需加载了

好了 现在我们就可以使用装饰器了


有警告 但是不影响 结果

我们解决这个警告 需要在根目录配置一个tsconfig.json 文件

{"compilerOptions": {"experimentalDecorators": true,"allowJs": true}
}

配置了以后 vscode 中就不会报错了


当然我们的装饰器 还可以接受参数 比如我们使用的redux中的connect,
这个样子 我们就可以使用redux 里面的connect组件了

注意哦,要使用装饰器,使用者必须要生命成class才可以使用

import React from "react";
import { withStyles } from "@material-ui/core/styles";
import { connect } from "react-redux";
//...const styles = theme => ({color: {color: "#f60"}
});@connect(mapStateToProps, mapDispatchToProps)
@withStyles(style)
class Comp extends React.Component {constructor(props) {super(props);this.state = {...};}//...handleTask = () => {this.props.onSetTask("aaa");};render() {const {...} =this.props;const { ... } = this.state; return (<React.Fragment>//...<button onClick="this.handleTask">aaa</button></React.Fragment>);}
}ExportTable.propTypes = {classes: PropTypes.object.isRequired
};ExportTable.defaultProps = {taskIdDetails: {}
};const mapStateToProps = (state, ownProps) => {if (state.reducerName && state.reducerName.export) {return {taskIdDetails: state.reducerName.export.taskIdDetails};} else {return {taskIdDetails: {}};}
};const mapDispatchToProps = (dispatch, props) => {return {onSetTask: taskId => {dispa个tch(setTask(taskId, props.identify));}};
};export default Comp;

如果有什么问题,欢迎下面评论指出,大家一起进步,如果这篇文章 对你有用处,点个赞呗,谢谢

React 装饰器的使用相关推荐

  1. [react] 装饰器(Decorator)在React中有什么应用?

    [react] 装饰器(Decorator)在React中有什么应用? connect.withRouter,等类似的高阶组件都可以用装饰器来使用 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放 ...

  2. chapter2.3、react高阶组件,装饰器

    React 技术 高阶组件 let Root = props => <div>{props.schoolName}</div>; 如果要在上例的Root组件进行增强怎么办 ...

  3. react——@修饰器——高阶组件的使用——通过装饰器来调用高阶组件——简单修改样式

    使用装饰器@ 装饰器 用来装饰类的,可以增强类,在不修改类的内部的源码的同时,增强它的能力(属性或方法) 装饰器使用@函数名写法,对类进行装饰,目前在js中还是提案,使用需要配置相关兼容代码库. re ...

  4. React 中 TypeScript 和装饰器及 Hooks

    概念 TypeScript 是强类型语言,相对于JavaScript 弱类型语言,它具有类型检测的功能,扩展了JavaScript 的语法. TS的安装与执行: //全局安装typescript np ...

  5. React之函数式组件和高阶组件(装饰器、带参装饰器)

    import React from 'react'; // 此句不能少 import ReactDom from 'react-dom';const Wrapper = props => < ...

  6. React使用cra创建项目,开启装饰器

    前言 今天使用 cra 创建了个项目.打算研究一下 rc-form 的实现思路.发现项目并未开启装饰器.并提示下面的错误. Support for the experimental syntax 'd ...

  7. Javascript 装饰器极速指南

    pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...

  8. 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. ...

  9. redux VS mobx (装饰器配合使用)

    前言:redux和mobx都是状态管理器,避免父级到子级再到子子级嵌套单向数据流,可以逻辑清晰的管理更新共享数据.(刷新页面redux储蓄数据即消失) 配置使用装饰器(使用高阶函数包装你的组件): n ...

最新文章

  1. 2016 KidCraft冬令营 一起来玩Scratch + MineCraft
  2. 我的新浪微博,顺便总结下近况
  3. C#温故而知新学习系列之.NET框架高级特性—概述.NET框架中的反射(一)
  4. 2019 好笔友-见字如面
  5. java 对象 读写锁_读写锁的java实现
  6. java在所选路径中找到分号,classpath
  7. uva_1422 Processor
  8. 一键安装JDK和自动配置Java环境变量
  9. jquery获取json对象中的key小技巧
  10. python 多线程 全局锁_python的多线程+GIL全局解释器锁+其他LOCK
  11. 有什么推荐的计算机毕设题目吗?2023最新springboot计算机毕业设计选题大全
  12. 【leetcode】995. Minimum Number of K Consecutive Bit Flips
  13. 服务器系统计划任务不执行,Windows 2008 r2任务计划程序执行批处理失败问题解决方法...
  14. java fadein_jQuery中fadein与fadeout方法用法示例
  15. ICP经营许可证办理流程有哪些?
  16. 数学分析-证明:单调有界数列必有极限
  17. 安徽大学计算机学院 张磊,安徽大学张磊在光学自由曲面高精度干涉检测领域取得进展...
  18. 天体运行轨迹_太阳系内天体的运行轨迹是什么?开普勒为什么这么伟大?
  19. rcu锁原理以及rcu example学习
  20. Moveit编程——moveit 编程技巧笔记——圆弧轨迹规划+修改轨迹

热门文章

  1. html如何设置跳转到百度页面,js仿百度切换皮肤功能(html+css)
  2. Vue前端js循环遍历数组八种方法总结最新
  3. 关于kylin的启动报不能解析域名错误积累
  4. 损失函数的总结与推导
  5. 从 Netflix 传奇看,结果导向的产品路线图如何制定?
  6. Oracle的基本使用
  7. 关于加速 pip 安装的两点妙招。
  8. 12,桥接模式-露娜的召唤师技能
  9. 关于QQ一些功能的实现
  10. 极客必知:iPhone备份番外篇