react中的hoc和修饰器@connect结合使用
在学习react-redux的时候,看到了修饰器这个新的属性,这个是es7的提案属性,很方便。于是我用@connect代替了connect(使用的时候需要配置,这里不赘述),省去了很多不必要的代码,但是我的view层和代码逻辑层是分开的,即view+hoc的模式:
先看封装的connect:
import {bindActionCreators} from "redux";
import {connect} from "react-redux";
import * as paperActions from "../redux/actions/index" export default connect(
state=>state,
dispatch=>bindActionCreators(paperActions,dispatch)
)
在view页面中引用:
import React, {Component} from "react"
import connect from './../../containers/index'; @connect
export default class Test extends Component {
render() {
return (
<div>......</div>
)
}
}
这个时候我们便已经取到了redux的action和state,那我所有的逻辑代码在hoc文件里面:
import React, {Component} from "react"; const getDisplayName = component => component.displayName || component.name || "Component"; const hoc = WrappedComponent => {
return class extends Component {
static displayName = `HOC(${getDisplayName(WrappedComponent)})`; // 构造
constructor(props) {
super(props);
} componentDidMount() {
console.log(this.props);
} render() {
const props = {
...this.props, };
return <WrappedComponent {...props} />
}
}
}; export default hoc
此时打印出来“this.props”是得不到state和action的,然后我再hoc里面尝试了各种方法,却一直在报错:
Leading decorators must be attached to a class declaration
很明显,修饰器只能放在类的前面,于是谷歌了许多资料,发现其实hoc就是一个纯函数,可以当修饰器来使用,于是:
import React, {Component} from "react"
import connect from './../../containers/index';
import hoc from "./hoc"
@connect
@hoc
export default class Test extends Component {
render() {
return (
<div>......</div>
)
}
}
在hoc中就可以使用redux里面的actions和state了
react中的hoc和修饰器@connect结合使用的更多相关文章
- 19.Decorator修饰器
Decorator 修饰器 类的修饰 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为.目前,有一个提案将这项功能,引入了 ECMAScript. @testable clas ...
- 修饰器Decorator
类的修饰 许多面向对象的语言都有修饰器(Decorator)函数,用来修改类的行为.目前,有一个提案将这项功能,引入了 ECMAScript. @testable class MyTestableCl ...
- python函数修饰器(decorator)
python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能.在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能.当你希望在不修改函 ...
- Decorator [ˈdekəreɪtə(r)] 修饰器/装饰器 -- 装饰模式
装饰模式 -- 原先没有,后期添加的属性和方法 修饰器(Decorator)是一个函数,用来修饰类的行为.这是ES7的一个提案,目前Babel转码器已经支持. 需要先安装一个插件: npm insta ...
- ES2017中的修饰器Decorator
前面的话 修饰器(Decorator)是一个函数,用来修改类的行为.本文将详细介绍ES2017中的修饰器Decorator 概述 ES2017 引入了这项功能,目前 Babel 转码器已经支持Deco ...
- mobx中使用class语法或decorator修饰器时报错
之前课程中老师用的babel的版本比较低,我在学习时安装的babel版本较高,因此每当使用class语法或decorator修饰器时都会出现一些报错的情况! ❌ ERROR in ./src/inde ...
- es6 Decorator修饰器
1.类的修饰: 修饰器(Decorator)函数,用来修改类的行为.修饰器是一个对类进行处理的函数.修饰器函数的第一个参数,就是所要修饰的目标类. @testable class MyTestable ...
- js基石之---es7的decorator修饰器
es7的decorator修饰器 装饰器(Decorator)是一种与类(class)相关的语法,用来注释或修改类和类方法. decorator就是给类添加或修改类的变量与方法的. 装饰器是一种函数, ...
- Python修饰器的函数式编程
Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都 ...
随机推荐
- 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理
第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...
- 第三百二十四节,web爬虫,scrapy模块介绍与使用
第三百二十四节,web爬虫,scrapy模块介绍与使用 Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了 ...
- 服务不支持chkconfig的解决
场景: 写了脚本,想用命令chkconfig加载自启动. chkconfig mongod on 解决方法: mongod 脚本的开头要这样加: #!/bin/bash #chkconfig:345 ...
- Docker for Mac 安装及Mysql安装使用
启动 mysql 镜像 docker run -d -p 127.0.0.1:3306:3306 –name mysql -v /Users/flyrPc/docker/mysql/data:/var ...
- android http json请求3种不同写法
第一种: public static String invoke() { String result = null; try { final Str ...
- Ubuntu+Eclipse+SVN 版本控制配置笔记
第一步:先更新系统内部软件包缓存(预防出错) # sudo dpkg --clear-avail # sudo apt-get update 第二步:安装Eclipse的SVN接口组件“javaH ...
- asp.net Core EF core ( Entity Framework 7 ) 数据库更新维护
CreateDatabaseIfNotExists等之前的API已经废弃,现在采用的是微软封装好,简化.高效的API,migrations 因为,旧API,要付出高昂的代价,以及局限性 打开VS20 ...
- jq dom不存在时绑定事件
$( "a.offsite" ).live( "click", function() { alert( "Goodbye!" ); // j ...
- t4 根据表名数组生成实体
<#@ template debug="false" hostspecific="true" language="C#" #> ...
- MyBatis之one2one与one2many
<!--顾客信息表,其中一个顾客对应一个国家,一个顾客对应多个订单--> <resultMap id="customerResultMap" type=" ...