内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何在vuex中使用react-創(chuàng)新互聯(lián)

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

目前創(chuàng)新互聯(lián)建站已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、寧強(qiáng)網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

響應(yīng)式數(shù)據(jù)觀(guān)測(cè)系統(tǒng)

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

如何在vuex中使用react

上圖來(lái)自于vue官網(wǎng)對(duì)vuex架構(gòu)的說(shuō)明,鏈接。

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

如何收集依賴(lài)

我們已經(jīng)有了響應(yīng)式數(shù)據(jù)系統(tǒng),接下來(lái)要解決的問(wèn)題就是如何收集依賴(lài),收集依賴(lài)必須要觸發(fā)get,而觸發(fā)get的前提是組件可以拿到store,因此第一步是向組件注入store。類(lèi)似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
};

這樣寫(xiě)的缺點(diǎn)顯而易見(jiàn),每個(gè)子組件都需要定義contextTypes,同樣的類(lèi)似于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;
 }
}

這樣一來(lái),只要組件執(zhí)行render方法,便會(huì)觸發(fā)get鉤子,從而使得store自動(dòng)收集依賴(lài),我們?cè)傧胂乱蕾?lài)是什么,其實(shí)依賴(lài)應(yīng)該是組件實(shí)例,那么當(dāng)set鉤子觸發(fā)時(shí),每個(gè)依賴(lài)(即組件實(shí)例)只要執(zhí)行forceUpdate方法就可以達(dá)到rerender的效果。

但是問(wèn)題是,get鉤子觸發(fā)時(shí),如何確定依賴(lài)到底是誰(shuí)呢?借鑒vue,我們定義一個(gè)stack,當(dāng)componentWillMount時(shí)進(jìn)棧,當(dāng)componentDidMount時(shí)出棧

componentWillMount() {
 pushTarget(this);
}

componentDidMount() {
 popTarget(this);
}

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

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

以上就是如何在vuex中使用react,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

名稱(chēng)欄目:如何在vuex中使用react-創(chuàng)新互聯(lián)
新聞來(lái)源:http://www.rwnh.cn/article6/ddopig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作App開(kāi)發(fā)、面包屑導(dǎo)航、小程序開(kāi)發(fā)、搜索引擎優(yōu)化、品牌網(wǎng)站建設(shè)

廣告

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

成都app開(kāi)發(fā)公司
噶尔县| 岑巩县| 湘西| 五台县| 迁西县| 盐山县| 恭城| 瑞金市| 娱乐| 米易县| 金阳县| 名山县| 东乌珠穆沁旗| 墨脱县| 丽江市| 乐安县| 临猗县| 林州市| 高邮市| 鄂伦春自治旗| 平度市| 交口县| 讷河市| 长汀县| 江城| 集贤县| 义乌市| 连南| 余庆县| 张家川| 昭通市| 镇沅| 东兴市| 甘德县| 澄城县| 大庆市| 广宁县| 崇阳县| 河北省| 武功县| 辽阳市|