<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Vuex的actions屬性的具體使用

        來源:懂視網 責編:小采 時間:2020-11-27 21:58:41
        文檔

        Vuex的actions屬性的具體使用

        Vuex的actions屬性的具體使用:Vuex 的 action 屬性內,可以定義異步操作邏輯,以滿足某些業務場景要求。在組件內,是通過 $store.dispatch 來觸發 action 定義的函數。 我們使用 action,來為計數器異步增 1。 1 Promise 方式 main.js: const store = n
        推薦度:
        導讀Vuex的actions屬性的具體使用:Vuex 的 action 屬性內,可以定義異步操作邏輯,以滿足某些業務場景要求。在組件內,是通過 $store.dispatch 來觸發 action 定義的函數。 我們使用 action,來為計數器異步增 1。 1 Promise 方式 main.js: const store = n

        Vuex 的 action 屬性內,可以定義異步操作邏輯,以滿足某些業務場景要求。在組件內,是通過 $store.dispatch 來觸發 action 定義的函數。

        我們使用 action,來為計數器異步增 1。

        1 Promise 方式

        main.js:

        const store = new Vuex.Store({
         state: {
         count: 0,
         },
         mutations: {
         increment(state, n = 1) {
         state.count += n;
         }
         },
         actions: {
         asyncInrement(context) {
         return new Promise(resolve => {
         setTimeout(() => {
         context.commit('increment');
         resolve();
         }, 1000)
         });
         }
         }
        });
        

        這里使用了 Promise ,在 1 s 后提交了 mutations 中定義的 increment 遞增函數。它是 ES6 語法,有三種狀態:

        狀態 說明
        Pending 進行中
        Resolved 已完成
        Rejected 失敗

         index.vue:

        <template>
        
         <div>
         {{count}}
         <button @click="asyncIncrementByAction">+1</button>
         </div>
        </template>
        
        <script>
         export default {
         name: "index.vue",
         computed: {
         count() {
         return this.$store.state.count;
         }
         },
         methods: {
         asyncIncrementByAction() {
         this.$store.dispatch('asyncInrement').then(() => {
         console.log(this.$store.state.count);
         })
         }
         }
         }
        </script>

        2 Callback 方式

        也可以使用普通回調來實現異步方案。

        main.js

        const store = new Vuex.Store({
        ...
         actions: {
         ...
         asyncInrement2(context, callback) {
         setTimeout(() => {
         context.commit('increment');
         callback();
         }, 1000);
         }
         }
        });
        

        index.vue:

        <template>
         <div>
         ...
         {{count}}
         <button @click="asyncIncrementByAction2">+1(Callback)</button>
         </div>
        </template>
        
        <script>
         export default {
         ...
         methods: {
         ...
         asyncIncrementByAction2() {
         this.$store.dispatch('asyncInrement2',() => {
         console.log(this.$store.state.count);
         });
         }
         }
         }
        </script>

        3 效果

        vuex action和mutations的區別

        action的功能和mutation是類似的,都是去變更store里的state,不過action和mutation有兩點不同:

        1、action主要處理的是異步的操作,mutation必須同步執行,而action就不受這樣的,也就是說action中我們既可以處理同步,也可以處理異步的操作

        2、action改變狀態,最后是通過提交mutation

        使用方式: 

        安裝:

        npm install vuex --save

        引用:

        store.js

        方法一:

        /**
         * 創建完文件后需要去到main.js中引入成全局
         */
        import Vue from "vue";
        import Vuex from "vuex";
        //使用vuex
        Vue.use(Vuex);
        const state = {
         targetUser: {} //用戶詳細資料數據
        };
         
        const getters = {
         //獲取到用戶狀態,//實時監聽state值的變化(最新狀態)
         targetUser: state => state.targetUser
        };
         
        const mutations = {
         //自定義改變state初始值的方法
         SET_TARGET_USER(state, targetUser) {
         if (targetUser) {
         state.targetUser = targetUser; //如果targetUser有內容就賦給狀態信息
         } else {
         //如果沒內容就給targetUser賦空對象
         state.targetUser = {};
         }
         }
        };
         
        const actions = {
         //這里面的方法是用來異步觸發mutations里面的方法,context與store 實例具有相同方法和屬性
         // 頁面定義的setGargetUser,targetUser為頁面傳過來的值
         setGargetUser({ commit }, targetUser) {
         commit("SET_TARGET_USER", targetUser);
         }
        };

        存儲頁面:

        this.$store.dispatch('setGargetUser',friend)

        獲取頁面:

         computed:{
         // 提示vuex中存入的用戶詳細資料
         targetUser(){
         return this.$store.getters.targetUser
         }
         },
        

        以上方法有一個問題就是如果多人開發;會出現不利于管理,下面用一個方法定義一個常量

        存儲:

        this.$store.dispatch('setUser',decode)
        

        store.js

        /**
         * 創建完文件后需要去到main.js中引入成全局
         */
        import Vue from "vue";
        import Vuex from "vuex";
        // 持久存儲插件
        import createPersistedState from "vuex-persistedstate";
         
        //使用vuex
        Vue.use(Vuex);
         
        /**
         * 在需要多人協作的項目中,我們可以使用常量代替mutation 事件類型。這在各種 Flux 實現中是很常見的模式。同時把這些常量放在單獨的文件中可以讓協作開發變得清晰。
         * 定義存儲信息
         *
         * */
         
        const types = {
         SET_TARGET_USER: "SET_TARGET_USER" //詳細資料
        };
         
        const state = {
         //用戶初始化的狀態
         targetUser: {} //用戶詳細資料數據
        };
        const getters = {
         //獲取到用戶狀態,//實時監聽state值的變化(最新狀態)
         targetUser: state => state.targetUser
        };
        const mutations = {
         //自定義改變state初始值的方法
         
         [types.SET_TARGET_USER](state, targetUser) {
         if (targetUser) {
         state.targetUser = targetUser; //如果targetUser有內容就賦給狀態信息
         } else {
         //如果沒內容就給targetUser賦空對象
         state.targetUser = {};
         }
         }
        };
         
        const actions = {
         //這里面的方法是用來異步觸發mutations里面的方法,context與store 實例具有相同方法和屬性
         setGargetUser({ commit }, targetUser) {
         commit(types.SET_TARGET_USER, targetUser);
         // localStorage.setItem("SET_TARGET_USER", JSON.stringify(targetUser));
         }
        };
        export default new Vuex.Store({
         state,
         mutations,
         getters,
         actions,
        });

        取值:

        this.$store.getters.targetUser

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vuex的actions屬性的具體使用

        Vuex的actions屬性的具體使用:Vuex 的 action 屬性內,可以定義異步操作邏輯,以滿足某些業務場景要求。在組件內,是通過 $store.dispatch 來觸發 action 定義的函數。 我們使用 action,來為計數器異步增 1。 1 Promise 方式 main.js: const store = n
        推薦度:
        標簽: 使用 屬性 的具體
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲男人天堂2022| 看免费毛片天天看| 亚洲丰满熟女一区二区v| 久久亚洲中文字幕无码| a级午夜毛片免费一区二区| 18女人毛片水真多免费| 国产成人免费高清在线观看| 亚洲av最新在线网址| 中国china体内裑精亚洲日本| 99久久久国产精品免费牛牛四川| 四虎影院永久免费观看| 亚洲激情电影在线| xxxxx做受大片视频免费| 免费在线看v网址| 日韩亚洲欧洲在线com91tv| 亚洲av日韩av永久无码电影| 日本高清免费网站| 中文文字幕文字幕亚洲色| 国产三级在线免费| 国产黄色一级毛片亚洲黄片大全 | 视频免费1区二区三区| 无人在线观看免费高清视频| 亚洲无线电影官网| 久久er国产精品免费观看8| 午夜视频免费观看| 亚洲免费福利视频| 日本特黄特黄刺激大片免费| 人体大胆做受免费视频| 亚洲一本综合久久| 春意影院午夜爽爽爽免费| 亚洲日韩v无码中文字幕| 一个人看的免费高清视频日本| 国产亚洲一区二区精品| 99久久免费国产精品热| 亚洲欧洲日韩在线电影| 免费在线观看视频网站| 亚洲精品成人网站在线播放| 国产高清免费在线| 亚洲欧洲免费视频| 亚洲精品网站在线观看你懂的| 国产成人无码免费视频97|