最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vuex?設(shè)計思路和實現(xiàn)方式

 更新時間:2022年08月10日 10:15:25   作者:June.1  
這篇文章主要介紹了vuex?設(shè)計思路和實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

vuex 設(shè)計思路和實現(xiàn)

API概念的東西就不介紹了, 如果還不了解vuex 的應(yīng)用, 可以去查看官方vuex文檔 。

下面著重講解 vuex的原理以及實現(xiàn)

vuex 設(shè)計思路

vuex是使用插件機(jī)制開發(fā)的, vuex 中的 store 本質(zhì)就是沒有template的隱藏著的vue實例

在beforeCreate 混入vuexInit ,vuexInit方法實現(xiàn)了store注入vue組件實例,并注冊了vuex store的引用屬性·$store

在這里插入圖片描述

vuex 設(shè)計思路源碼

  // vuex插件公開的install方法
  function install (_Vue) {
    if (Vue && _Vue === Vue) {
      {
        console.error(
          '[vuex] already installed. Vue.use(Vuex) should be called only once.'
        );
      }
      return
    }
    Vue = _Vue;
    applyMixin(Vue);
  }
  /* ...  */
   var index_cjs = {
    Store: Store,
    install: install, // 開放出去install方法, 直接在項目中使用這個插件
    version: '3.4.0',
    mapState: mapState,
    mapMutations: mapMutations,
    mapGetters: mapGetters,
    mapActions: mapActions,
    createNamespacedHelpers: createNamespacedHelpers
  };
  return index_cjs;
// 混入到項目中
function applyMixin (Vue) {
   var version = Number(Vue.version.split('.')[0]);
   if (version >= 2) {
     Vue.mixin({ beforeCreate: vuexInit }); // 在生命周期beforeCreate創(chuàng)建全局混入函數(shù)
   } else {
     // 覆蓋初始化并注入vuex初始化過程
	// 1.x 以上版本兼容。
     var _init = Vue.prototype._init;
     Vue.prototype._init = function (options) {
       if ( options === void 0 ) options = {};
       options.init = options.init
         ? [vuexInit].concat(options.init)
         : vuexInit;
       _init.call(this, options);
     };
   }
   function vuexInit () { // Vuex 初始化鉤子,注入到每個實例初始化鉤子列表中
	   var options = this.$options;
	   // store injection
	   if (options.store) {
	     this.$store = typeof options.store === 'function'
	       ? options.store()
	       : options.store;
	   } else if (options.parent && options.parent.$store) {
	     this.$store = options.parent.$store;
	   }
	}
}
// 使用Vue實例來存儲狀態(tài)樹
// 隱藏警告,以防用戶添加了, 一些優(yōu)先的 global mixins
function resetStoreVM (store, state, hot) {
  /* other... */
  var silent = Vue.config.silent;
  Vue.config.silent = true;
  store._vm = new Vue({ // 創(chuàng)建一個vue 實例
    data: {
      $$state: state
    },
    computed: computed
  });
  Vue.config.silent = silent;
/* other... */
}

vue 響應(yīng)式設(shè)計,依賴監(jiān)聽、依賴收集

想深刻理解 vuex 的設(shè)計思路。

要明白 vue 對象數(shù)據(jù) Object.defineProperty ,getter/setter 方法的代理劫持的原理

// src/core/instance/state.js
// 初始化組件的state
export function initState (vm: Component) {
  vm._watchers = []
  const opts = vm.$options
  if (opts.props) initProps(vm, opts.props)
  if (opts.methods) initMethods(vm, opts.methods)
  // 當(dāng)組件存在data屬性
  if (opts.data) {
    initData(vm)
  } else {
    observe(vm._data = {}, true /* asRootData */)
  }
  // 當(dāng)組件存在 computed屬性
  if (opts.computed) initComputed(vm, opts.computed)
  if (opts.watch && opts.watch !== nativeWatch) {
    initWatch(vm, opts.watch)
  }
}

vuex 就是實現(xiàn)了帶有計算屬性的 data 數(shù)據(jù), 原理和 initComputed、 initData 是一致的

如果上面已經(jīng)完全理解,想更深度了解響應(yīng)式依賴 繼續(xù)閱讀vue的computed、vm.$data原理

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Vue動態(tài)設(shè)置圖片時src不生效的原因及解決方法

    Vue動態(tài)設(shè)置圖片時src不生效的原因及解決方法

    這篇文章主要介紹了Vue動態(tài)設(shè)置圖片時src不生效的原因及解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • vue輕量級框架無法獲取到vue對象解決方法

    vue輕量級框架無法獲取到vue對象解決方法

    這篇文章主要介紹了vue輕量級框架無法獲取到vue對象解決方法相關(guān)知識點(diǎn),有需要的讀者們跟著學(xué)習(xí)下。
    2019-05-05
  • vue導(dǎo)出excel表格并支持樣式及行高修改

    vue導(dǎo)出excel表格并支持樣式及行高修改

    這篇文章主要為大家介紹了vue導(dǎo)出excel表格并支持樣式及行高修改,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • vue中$set與$delete的使用及說明

    vue中$set與$delete的使用及說明

    這篇文章主要介紹了vue中$set與$delete的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue+freemarker中遇到的坑及解決

    vue+freemarker中遇到的坑及解決

    這篇文章主要介紹了vue+freemarker中遇到的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue路由Hash模式分析

    Vue路由Hash模式分析

    Vue-router是Vue的核心組件,主要是作為Vue的路由管理器,Vue-router默認(rèn)hash模式,本文講給大家詳細(xì)分析Vue路由Hash模式,文中有相關(guān)的代碼示例供大家參考,感興趣的同學(xué)可以借鑒一下
    2023-06-06
  • Vue3非遞歸渲染Tree組件的初步實現(xiàn)代碼

    Vue3非遞歸渲染Tree組件的初步實現(xiàn)代碼

    這篇文章主要介紹了Vue3非遞歸渲染Tree組件的初步實現(xiàn),文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定幫助,需要的朋友可以參考下
    2024-05-05
  • Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應(yīng)速度

    Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應(yīng)速度

    網(wǎng)站頁面的響應(yīng)速度與用戶體驗息息相關(guān),直接影響到用戶是否愿意繼續(xù)訪問你的網(wǎng)站,所以這篇文章主要給大家介紹了關(guān)于Vue項目打包、合并及壓縮優(yōu)化網(wǎng)頁響應(yīng)速度的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Vue項目之安裝引入使用vconsole方式(生產(chǎn)環(huán)境不顯示)

    Vue項目之安裝引入使用vconsole方式(生產(chǎn)環(huán)境不顯示)

    在Vue2開發(fā)中,引入vConsole可以為移動端提供類似瀏覽器F12的調(diào)試工具,支持查看日志、網(wǎng)絡(luò)請求等功能,vConsole是一個輕量、可拓展的前端調(diào)試面板,與框架無關(guān),適用于多種前端框架,安裝方法包括npm和CDN兩種,可根據(jù)項目環(huán)境配置是否顯示調(diào)試面板
    2024-10-10
  • Vue3?封裝?Element?Plus?Menu?無限級菜單組件功能的詳細(xì)代碼

    Vue3?封裝?Element?Plus?Menu?無限級菜單組件功能的詳細(xì)代碼

    本文分別使用?SFC(模板方式)和?tsx?方式對?Element?Plus?*el-menu*?組件進(jìn)行二次封裝,實現(xiàn)配置化的菜單,有了配置化的菜單,后續(xù)便可以根據(jù)路由動態(tài)渲染菜單,對Vue3?無限級菜單組件相關(guān)知識感興趣的朋友一起看看吧
    2022-09-09

最新評論

迭部县| 松潘县| 当阳市| 佛冈县| 马公市| 千阳县| 神农架林区| 福泉市| 毕节市| 城口县| 梨树县| 婺源县| 和田县| 乐山市| 桑植县| 南乐县| 马尔康县| 陇南市| 宁明县| 安义县| 彰化市| 浪卡子县| 四会市| 吴桥县| 驻马店市| 鄂尔多斯市| 惠州市| 双桥区| 遂川县| 丁青县| 邢台市| 金寨县| 金湖县| 突泉县| 卢龙县| 贺兰县| 苗栗市| 赤水市| 黄冈市| 含山县| 吴忠市|