亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

在react中使用vuex的示例代碼

2019-11-19 13:23:25
字體:
來源:轉載
供稿:網友

前言

筆者最近在學習使用react,提到react就繞不過去redux。redux是一個狀態管理架構,被廣泛用于react項目中,但是redux并不是專為react而生,兩者還需要react-redux建立一座橋梁。同時,redux架構規定只能發送同步action,要想發送異步action就需要結合中間件如redux-thunk、redux-saga等,所以說要想搞定redux還真是不容易啊,光名詞就這么多。筆者以前也接觸過一點vuex,vuex對筆者這樣的菜雞相對友好,但是vuex是和vue配套的,是不可能用在react中的,這輩子都別想用在react中。但是我不服,那么這篇文章就探索下如何制作一個可以在react中使用的類似vuex的狀態管理工具,我將它取名為reux

vuex <=> redux + react-redux + redux-saga

正文

響應式數據觀測系統

vue的一大特色就是響應式數據觀測系統,它可以在get數據時收集依賴,在set數據時觸發更新。vuex借助于vue的數據觀測系統,可以輕松的收集數據依賴,并且依賴可以精細到組件的粒度,也就是說某一狀態改變時,只有依賴到這一狀態的組件才會觸發rerender,這樣看來redux體系就比較傻,只要提交action,就會從根組件rerender(react-redux內部自動進行shouldCompoentUpdate判斷)。

上圖來自于vue官網對vuex架構的說明,鏈接。

上圖中的component是vue component,只要vue component執行render,那么vuex的數據響應系統就可以自動的收集依賴,當狀態改變時,依賴于此狀態的組件就會重新渲染。既然我們要實現的是一個類vuex的狀態管理工具,即支持以get的方式收集依賴,以set的方式觸發更新,所以reux利用了vue的響應式數據觀測系統,正所謂前人種樹,后人乘涼。

如何收集依賴

我們已經有了響應式數據系統,接下來要解決的問題就是如何收集依賴,收集依賴必須要觸發get,而觸發get的前提是組件可以拿到store,因此第一步是向組件注入store。類似react-redux,reux提供了Provider使子組件可以拿到store。

class Provider extends Component { getChildContext() {  return {store: this.props.store}; } render() {  const { children } = this.props;  return children; }}Provider.childContextTypes = { store: PropTypes.object};

相應的子組件可以context拿到store,如下

class Child extends Component { render() {  // store => this.context.store }}Child.contextTypes = { store: PropTypes.object};

這樣寫的缺點顯而易見,每個子組件都需要定義contextTypes,同樣的類似于react-redux,reux提供了connect函數,用于映射state => props

const connect = (mapStateToProps = () => {}) => { return (WrappedComponent) => {  const Wrapper = class extends Component {   render() {    const store = this.context.store;    const props = Object.assign({}, this.props, mapStateToProps(store.state, this.props), {dispatch: store.dispatch, commit: store.commit});    return <WrappedComponent {...props} />   }  }  Wrapper.contextTypes = {   store: PropTypes.object  };  reaturn Wrapper; }}

這樣一來,只要組件執行render方法,便會觸發get鉤子,從而使得store自動收集依賴,我們再想下依賴是什么,其實依賴應該是組件實例,那么當set鉤子觸發時,每個依賴(即組件實例)只要執行forceUpdate方法就可以達到rerender的效果。

但是問題是,get鉤子觸發時,如何確定依賴到底是誰呢?借鑒vue,我們定義一個stack,當componentWillMount時進棧,當componentDidMount時出棧

componentWillMount() { pushTarget(this);}componentDidMount() { popTarget(this);}

這樣當get鉤子觸發時,當前target就是目標依賴。同時應當注意,當組件update時應當重新收集依賴,因為update之后依賴關系很可能已經變化了

update() { // 清空依賴 this.clear(); pushTarget(this); this.forceUpdate(() => {  popTarget(this); })}

至此,我們的小目標已經完成了,在react中使用vuex不再是夢!

原文地址

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
2020欧美日韩在线视频| 国产成人综合一区二区三区| 日韩美女主播视频| 黑人巨大精品欧美一区免费视频| 久久久免费在线观看| 欧美高跟鞋交xxxxhd| 亚洲成人a级网| 亚洲成人av片在线观看| 黑人欧美xxxx| 欧美性猛交xxxx黑人| 性色av一区二区三区| 国产精品揄拍500视频| 亚洲一区二区免费在线| 欧美精品在线网站| 综合av色偷偷网| 亚洲大胆人体在线| 久久久www成人免费精品| 亚洲天堂第一页| 成人在线播放av| 国产精品成人播放| 久久好看免费视频| 日韩中文字幕在线播放| 国产精品成人av在线| 精品国产乱码久久久久久婷婷| 欧美激情欧美狂野欧美精品| 91精品国产91久久久| 国产精品日韩在线播放| 2020国产精品视频| 亚洲奶大毛多的老太婆| 久久精品国产69国产精品亚洲| 久久精品久久久久久国产 免费| 日韩av观看网址| 国产一区二区在线免费| 国产亚洲综合久久| 国产精品欧美一区二区三区奶水| 国产精品黄色影片导航在线观看| 日韩欧美中文字幕在线观看| 国产一区二区三区在线观看网站| 伊人久久久久久久久久| 亚洲日本欧美日韩高观看| 精品日韩视频在线观看| 亚洲天堂日韩电影| 91爱视频在线| 亚洲第一精品久久忘忧草社区| 国产精品成人一区二区三区吃奶| 色综合久久久久久中文网| 亚洲国产欧美一区| 亚洲毛茸茸少妇高潮呻吟| 欧美性xxxxxxxxx| 欧美中文在线视频| 欧美香蕉大胸在线视频观看| 国内精品久久久久久中文字幕| 国产亚洲精品久久久久久牛牛| 伦伦影院午夜日韩欧美限制| 亚洲国产精品推荐| 在线视频一区二区| 最好看的2019年中文视频| 欧美精品videosex牲欧美| 日韩大胆人体377p| 亚洲最新中文字幕| 国产精品视频xxx| 欧美日韩成人在线播放| 国产午夜精品一区二区三区| 亚洲嫩模很污视频| 日韩久久精品电影| 亚洲精品国产福利| 久久精品青青大伊人av| 精品国产欧美一区二区三区成人| 九九热这里只有精品6| 欧美黄色小视频| 日韩成人av在线| 欧美精品在线免费播放| 欧美日韩国产精品专区| 日韩黄色在线免费观看| www.精品av.com| 97在线视频免费看| 日韩美女av在线免费观看| 欧美专区福利在线| 成人欧美一区二区三区黑人孕妇| 成人性生交大片免费观看嘿嘿视频| 亚洲人成电影网| 午夜精品久久久久久久99黑人| 日韩欧美在线中文字幕| 亚洲第一区中文99精品| 欧美大奶子在线| 国产精品一区=区| 中文字幕亚洲天堂| 中文字幕一精品亚洲无线一区| 亚洲欧美制服另类日韩| 久久久精品免费| 成人精品一区二区三区电影免费| 亚洲国产精久久久久久| 亚洲精品乱码久久久久久按摩观| 成人有码在线播放| 国产精品久久久av| 国产精品大片wwwwww| 国产色综合天天综合网| 久久精品中文字幕| 亚洲综合日韩在线| 日韩在线观看免费全集电视剧网站| 欧美日韩国产在线看| 国产+成+人+亚洲欧洲| 日韩风俗一区 二区| 欧美午夜www高清视频| 成人久久精品视频| 国产精品久久综合av爱欲tv| 亚洲乱码一区av黑人高潮| 国产精品日韩一区| 国产98色在线| 亚洲第一精品久久忘忧草社区| 久久精品视频导航| 精品国产欧美成人夜夜嗨| 中文字幕不卡在线视频极品| 国产精品入口免费视频一| 久久人91精品久久久久久不卡| 狠狠做深爱婷婷久久综合一区| 日韩中文字幕在线免费观看| 中文字幕日韩欧美在线| 国产精品欧美日韩一区二区| 都市激情亚洲色图| 亚洲偷欧美偷国内偷| 97在线精品国自产拍中文| 影音先锋欧美精品| 久热精品视频在线观看一区| 国产日韩换脸av一区在线观看| 91黑丝在线观看| 欧美日韩成人在线播放| 久久精品国产亚洲精品2020| 亚洲欧美一区二区激情| 欧洲成人免费视频| 欧美三级免费观看| 亚洲一区二区中文字幕| 久久久精品免费| 久久免费少妇高潮久久精品99| 欧美激情一区二区三区高清视频| 91美女片黄在线观| www.久久草.com| 亚洲a级在线播放观看| 欧美第一淫aaasss性| 欧美激情在线有限公司| 日韩成人在线观看| 午夜伦理精品一区| 日韩在线观看视频免费| 欧美激情视频网站| 麻豆国产精品va在线观看不卡| 91亚洲永久免费精品| 青青久久av北条麻妃黑人| 最近2019年日本中文免费字幕| 国产精品偷伦视频免费观看国产| 91tv亚洲精品香蕉国产一区7ujn| 91精品视频大全| 亚洲欧洲成视频免费观看| 国产亚洲欧美aaaa| 色综合导航网站| 久久久久久久久久久久久久久久久久av| 精品久久久久久国产| 亚洲乱码一区av黑人高潮| 欧美午夜电影在线| 中文字幕亚洲欧美在线| 亚洲欧洲在线看| 国产精品一区二区av影院萌芽| 成人在线观看视频网站| 美女久久久久久久久久久| 欧美激情欧美狂野欧美精品|