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


使用装饰器

react 装饰器的更多相关文章
- react mobx 装饰器语法配置
1.弹出项目配置 npm run eject 此处注意,若弹出项目配置失败,请先执行以下两行代码(我的项目执行上一句都会报错,所以都会执行) 1.git add . 2.git commit -m & ...
- ES 6 装饰器与 React 高阶组件
关于 Decorator 到底是 ES 6 引入的还是 ES 7 引入的我也不是很明白了,两种说法都有,这种问题懒得纠结了--在用的时候发现这个东西很好用,平常用处可能不大,但是结合 React 就很 ...
- 在react中用装饰器来装饰connect
假设我们在react中有如下header组件: import React, { PureComponent } from 'react'; import { connect } from 'react ...
- React支持装饰器
在用mobx时用到了装饰器,无奈环境不支持装饰器,搜索了半天,网上教程乱七八糟,最后想到了babel官网上肯定有,一搜果然有,安装教程 见Babel官网. 最快捷的教程是官网文档
- 【react】---react中使用装饰器
一.creact-react-app中使用装饰器 运行 npm run eject 可以让由create-react-app创建的项目的配置项暴露出来 此时,项目中多了一个config文件,并且各个配 ...
- JS 装饰器解析
随着 ES6 和 TypeScript 中类的引入,在某些场景需要在不改变原有类和类属性的基础上扩展些功能,这也是装饰器出现的原因. 装饰器简介 作为一种可以动态增删功能模块的模式(比如 redux ...
- Javascript 装饰器极速指南
pablo.png Decorators 是ES7中添加的JavaScript新特性.熟悉Typescript的同学应该更早的接触到这个特性,TypeScript早些时候已经支持Decorators的 ...
- ES6 系列之我们来聊聊装饰器
Decorator 装饰器主要用于: 装饰类 装饰方法或属性 装饰类 @annotation class MyClass { } function annotation(target) { targe ...
- MobX基础 ----- 类的静态属性和装饰器
当我们使用MobX的时候,首先要声明一个store, 用来保存状态,它的最基本的语法 如下: class Todo { @observable title = ""; @obser ...
- Typescript中的装饰器原理
Typescript中的装饰器原理 1.小原理 因为react中的高阶组件本质上是个高阶函数的调用, 所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器. 也就是说,装饰器的本质就是一 ...
随机推荐
- watch对比computed
总结: computed和watch之间的区别: 1.computed能完成的功能,Watch都可以实现 2.watch能完成的功能,comp ...
- Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 2 应用级扩缩容
简介: 应用级扩缩容是相对于运维级而言的.像监控CPU/内存的利用率就属于应用无关的纯运维指标,针对这种指标进行扩缩容的HPA配置就是运维级扩缩容.而像请求数量.请求延迟.P99分布等指标就属于应用相 ...
- WPF 通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸转换过来
本文将告诉大家如何在 WPF 或者其他 Win32 应用里面,在收到鼠标消息时,通过 GetMessageExtraInfo 方法获取当前收到的鼠标消息是否由触摸消息提升而来 大家都知道,在不开启 W ...
- dotnet win32 使用 WIC 获取系统编解码器
在 Windows 系统上,有一个很重要的概念是 Windows Imaging Component 也就是 WIC 层,这是专门用来处理多媒体相关的系统组件,特别是用来处理图片相关,包括编码和解码和 ...
- 从 Rollover+curator 到 ILM
数据量增长,当前存在的问题: 查询与写入越来越慢,聚合的速度慢的离谱,聚合的数据量大一些的话,可能出现超时失败,甚至OOM 磁盘和内存资源以肉眼可见的速度快速消耗,甚至出现满载的情况 JVM频繁GC, ...
- 《最新出炉》系列入门篇-Python+Playwright自动化测试-43-分页测试
1.简介 分页测试,这种一般都是公共的方法系统中都写好了,这种一般出现是数据展示比较多的时候,会采取分页的方法,而且比较固定,一般是没有问题的,因此它非常适合自动化测试,但是如何使用playwrigh ...
- vue路由跳转的三种方式
目录 1.router-link [实现跳转最简单的方法] 2.this.$router.push({ path:'/user'}) 3.this.$router.replace{path:'/' } ...
- windows10 64 解决 exec:"gcc" executable file not found in %PATH%报错问题
1.下载编译好的包 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/ 这里我选择64位的 2.解压完之后,配置环境变量. 解压完到 ...
- ubuntu配置nginx+php开发环境(virtualbox)
A.安装环境 1.安装php7.0 sudo apt install php7.0 2.安装php7.0-fpm,这是php和nginx之间的连接器. sudo apt install php7.0- ...
- python教程3.3:字符和编码
1.二进制 计算机只能存储和识别二进制,但是人类常用的字母.数字.汉字怎么用计算机存储和识别呢? 人类强行约定一个对应表,把数字.字母和数字进行对应上,这样就可以用二进制表示字母和数字了. 2.ASC ...