欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何在vuex中使用react

本篇文章給大家分享的是有關(guān)如何在vuex中使用react,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、烏海ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的烏海網(wǎng)站制作公司

響應(yīng)式數(shù)據(jù)觀測系統(tǒng)

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

如何在vuex中使用react

上圖來自于vue官網(wǎng)對vuex架構(gòu)的說明,鏈接。

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

如何收集依賴

我們已經(jīng)有了響應(yīng)式數(shù)據(jù)系統(tǒng),接下來要解決的問題就是如何收集依賴,收集依賴必須要觸發(fā)get,而觸發(fā)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
};

相應(yīng)的子組件可以context拿到store,如下

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

這樣寫的缺點顯而易見,每個子組件都需要定義contextTypes,同樣的類似于react-redux,reux提供了connect函數(shù),用于映射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;
 }
}

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

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

componentWillMount() {
 pushTarget(this);
}

componentDidMount() {
 popTarget(this);
}

這樣當(dāng)get鉤子觸發(fā)時,當(dāng)前target就是目標(biāo)依賴。同時應(yīng)當(dāng)注意,當(dāng)組件update時應(yīng)當(dāng)重新收集依賴,因為update之后依賴關(guān)系很可能已經(jīng)變化了

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

以上就是如何在vuex中使用react,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章名稱:如何在vuex中使用react
文章地址:http://chinadenli.net/article44/geoshe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作品牌網(wǎng)站設(shè)計外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站建設(shè)營銷型網(wǎng)站建設(shè)手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作