深入浅出之React-redux中connect的装饰器用法@connect

112次阅读

共计 1888 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要介绍了 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
结语
感谢您的观看,如有不足之处,欢迎批评指正。

正文完
 0