這篇文章主要介紹了react-redux中connect的裝飾器用法@connect詳解,寫的十分的全面細緻,具備必定的參考價值,對此有須要的朋友能夠參考學習下。若有不足之處,歡迎批評指正。前端
一般咱們須要一個reducer和一個action,而後使用connect來包裹你的Component。假設你已經有一個key爲main的reducer和一個action.js. 咱們的App.js通常都這麼寫:react
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,稍微改一改:json
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:redux
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
而後在須要用到的組件中這麼用:babel
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中配置:app
{ "plugins":[ "transform-decorators-legacy" ] }//歡迎加入前端全棧開發交流圈一塊兒學習交流:864305860
若是你用的是vscode, 能夠在項目根目錄下添加jsconfig.json文件來消除代碼警告:dom
{ "compilerOptions": { "experimentalDecorators": true } }//歡迎加入前端全棧開發交流圈一塊兒學習交流:864305860
結語學習
感謝您的觀看,若有不足之處,歡迎批評指正。spa