深入浅出之React-redux中connect的装饰器用法@connect
这篇文章主要介绍了react-redux中connect的装饰器用法@connect详解,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。
通常我们需要一个reducer和一个action,然后使用connect来包裹你的Component。假设你已经有一个key为main的reducer和一个action.js. 我们的App.js一般都这么写:
import React from 'react' import {render} from 'react-dom' import {connect} from 'react-redux' import {bindActionCreators} from 'redux' import action from 'action.js' class App extends React.Component{ render(){ return <div>hello</div> } } function mapStateToProps(state){ return state.main } function mapDispatchToProps(dispatch){ return bindActionCreators(action,dispatch) }//欢迎加入前端全栈开发交流圈一起学习交流:864305860 export default connect(mapStateToProps,mapDispatchToProps)(App)
这样并没有什么问题。看着connect的用法,有没有觉得很熟悉?典型的wrapper嘛,这里必须拿装饰器来装X,稍微改一改:
import React from 'react' import {render} from 'react-dom' import {connect} from 'react-redux' import {bindActionCreators} from 'redux' import action from 'action.js' @connect( state=>state.main, dispatch=>bindActionCreators(action,dispatch) ) class App extends React.Component{ render(){ return <div>hello</div> }//欢迎加入前端全栈开发交流圈一起学习交流:864305860 }
emmm,这样舒服很多了,在我们实际项目中,可能是一个模块下面又有很多个小组件,它们都共用同样的action和reducer,我们在每个组件中都这么写,是不是有点太麻烦了?冗余代码太多了。 其实是可以把connect抽取出来的,比如写一个connect.js:
import {connect} from 'react-redux' import {bindActionCreators} from 'redux' import action from 'action.js' export default connect( state=>state.main, dispatch=>bindActionCreators(action,dispatch) )//欢迎加入前端全栈开发交流圈一起学习交流:864305860
然后在需要用到的组件中这么用:
import React from 'react' import {render} from 'react-dom' import connect from 'connect.js' @connect export default class App extends React.Component{ render(){ return <div>hello</div> } }//欢迎加入前端全栈开发交流圈一起学习交流:864305860
这样就ok了,和最开始的用法比起来,是不是明显更装X更好用? 需要说明的是,这里用了装饰器,需要安装模块babel-plugin-transform-decorators-legacy,然后在babel中配置:
{ "plugins":[ "transform-decorators-legacy" ] }//欢迎加入前端全栈开发交流圈一起学习交流:864305860
如果你用的是vscode, 可以在项目根目录下添加jsconfig.json文件来消除代码警告:
{ "compilerOptions": { "experimentalDecorators": true } }//欢迎加入前端全栈开发交流圈一起学习交流:864305860
结语
感谢您的观看,如有不足之处,欢迎批评指正。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
美团即时物流的分布式系统架构设计
背景 美团外卖已经发展了五年,即时物流探索也经历了 3 年多的时间,业务从零孵化到初具规模,在整个过程中积累了一些分布式高并发系统的建设经验。最主要的收获包括两点: 即时物流业务对故障和高延迟的容忍度极低,在业务复杂度提升的同时也要求系统具备分布式、可扩展、可容灾的能力。即时物流系统阶段性的逐步实施分布式系统的架构升级,最终解决了系统宕机的风险。围绕成本、效率、体验核心三要素,即时物流体系大量结合 AI 技术,从定价、ETA、调度、运力规划、运力干预、补贴、核算、语音交互、LBS 挖掘、业务运维、指标监控等方面,业务突破结合架构升级,达到促规模、保体验、降成本的效果。 本文主要介绍在美团即时物流分布式系统架构逐层演变的进展中,遇到的技术障碍和挑战: 订单、骑手规模大,供需匹配过程的超大规模计算问题。遇到节假日或者恶劣天气,订单聚集效应,流量高峰是平常的十几倍。物流履约是线上连接线下的关键环节,故障容忍度极低,不能宕机,不能丢单,可用性要求极高。数据实时性、准确性要求高,对延迟、异常非常敏感。 美团即时物流架构 美团即时物流配送平台主要围绕三件事展开:一是面向用户提供履约的 SL...
- 下一篇
解析Node.js通过axios实现网络请求
本次给大家分享一篇node.js通过axios实现网络请求的方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 1、使用Npm 下载axios npm install --save axios var update_url = axios.create({ baseURL:'debug url' }); update_url.get('/debug url').then(function (response){ //response 就是请求url 返回的内容 }//欢迎加入前端全栈开发交流圈一起学习交流:864305860 上述的方法请求文件时候,body的默认格式不是form-data。因此我们需要请求的数据格式为form-data的时候,需要使用下面的库 request npm install --save request 2、request 请求url,可以使用get,post的方式. request.post({url:'http://192.168.1.159/backup/client/interface1s.php...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题