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

vuex中store存儲(chǔ)store.commit和store.dispatch的區(qū)別及說(shuō)明

 更新時(shí)間:2022年09月08日 10:09:11   作者:艾歡歡  
這篇文章主要介紹了vuex中store存儲(chǔ)store.commit和store.dispatch的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

store存儲(chǔ)store.commit和store.dispatch區(qū)別

代碼示例:

this.$store.commit('loginStatus', 1);
this.$store.dispatch('isLogin', true);

規(guī)范的使用方式:

// 以載荷形式
store.commit('increment',{
? amount: 10 ? //這是額外的參數(shù)
})
// 或者使用對(duì)象風(fēng)格的提交方式
store.commit({
? type: 'increment',
? amount: 10 ? //這是額外的參數(shù)
})

主要區(qū)別

dispatch:含有異步操作,數(shù)據(jù)提交至 actions ,可用于向后臺(tái)提交數(shù)據(jù)

寫(xiě)法示例: this.$store.dispatch('isLogin', true);

commit:同步操作,數(shù)據(jù)提交至 mutations ,可用于登錄成功后讀取用戶(hù)信息寫(xiě)到緩存里

寫(xiě)法示例: this.$store.commit('loginStatus', 1);

兩者都可以以載荷形式或者對(duì)象風(fēng)格的方式進(jìn)行提交

vuex store原理及使用指南

Vuex 是一個(gè)專(zhuān)為 Vue.js 應(yīng)用程序開(kāi)發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。

Vuex的store組件,主要存儲(chǔ)應(yīng)用中的狀態(tài),具體應(yīng)用中如何來(lái)用呢?存儲(chǔ)我們也可以使用緩存比如uni.setStorageSync(...) uni.getStorageSync(),來(lái)存儲(chǔ)應(yīng)用級(jí)的狀態(tài),也可以實(shí)現(xiàn)相應(yīng)需求。單純緩存數(shù)據(jù)可能并不能很好滿(mǎn)足一定的業(yè)務(wù)場(chǎng)景,而且緩存數(shù)據(jù)是多樣化的,狀態(tài)的交互在應(yīng)用中存在很多,不同模塊間互相通過(guò)狀態(tài)調(diào)用來(lái)通信,而如果僅通過(guò)緩存值來(lái)通信,如果需求改動(dòng),可能造成比較大的修改維護(hù)量。Store組件是封裝比較好的對(duì)象來(lái)管理統(tǒng)一狀態(tài)及數(shù)據(jù)的,這樣可能更優(yōu)雅,容易維護(hù)一些,比如:他的state對(duì)象存放狀態(tài)屬性及值,用getters中定義訪(fǎng)問(wèn)屬性數(shù)據(jù)的方法,mutations中定義修改屬性的同步方法,actions中定義外部訪(fǎng)問(wèn)屬性數(shù)據(jù)的異步方法。

使用

我們通過(guò)如下內(nèi)容,從安裝、到一個(gè)實(shí)例場(chǎng)景的實(shí)現(xiàn),使用vue框架來(lái)實(shí)現(xiàn)這個(gè)場(chǎng)景,來(lái)說(shuō)明vuex的store的使用。

安裝

$ npm install vuex --save

注意此處可能會(huì)報(bào)錯(cuò),最好指定vuex版本,用如下命令

$ npm install vuex@3.6.2 --save

示例需求場(chǎng)景

應(yīng)用在登錄后存儲(chǔ)狀態(tài)數(shù)據(jù):1.是否登錄is_login(true已登錄,false未登錄);2.當(dāng)前用戶(hù)id curr_uid。

源碼目錄結(jié)構(gòu)

本源碼使用vue2+uview2.x ui

store組件初始化

main.js,引入store組件

import App from './App'
import store from "./store";
...
 
const app = new Vue({
	store,
    ...App
})
app.$mount()
...

App.vue,狀態(tài)緩存處理,避免刷新時(shí)狀態(tài)被清空

export default {
...
		created(){
		    //在頁(yè)面刷新時(shí)將vuex里的信息保存到localStorage里 https://blog.csdn.net/XinYe666666/article/details/102939381
			window.addEventListener("beforeunload",()=>{
				localStorage.setItem("messageStore",JSON.stringify(this.$store.state))
			})
		    //在頁(yè)面加載時(shí)讀取localStorage里的狀態(tài)信息
	        localStorage.getItem("messageStore") && this.$store.replaceState(Object.assign(this.$store.state,JSON.parse(localStorage.getItem("messageStore"))));
		},
...

store,存儲(chǔ)狀態(tài)的組件文件,加入模塊化

index.js,存儲(chǔ)組件的入口文件,加載狀態(tài)組件、模塊化

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
 
Vue.use(Vuex)
 
const store = new Vuex.Store({
   modules: {
     user
   },
});

user.js 模塊狀態(tài)組件

import { getToken,removeToken } from '@/common/auth.js';
const state={   //要設(shè)置的全局訪(fǎng)問(wèn)的state對(duì)象
     is_login: false,
     curr_uid:0
     //要設(shè)置的初始屬性值
   };
const getters = {   //實(shí)時(shí)監(jiān)聽(tīng)state值的變化(最新?tīng)顟B(tài))
    isLogin(state) {  //承載變化的showFooter的值
       return state.is_login
    },
    getCurrUid(state){  //承載變化的curr_uid的值
       return state.curr_uid
    }
};
const mutations = {
    setLogin(state) {   //自定義改變state初始值的方法,這里面的參數(shù)除了state之外還可以再傳額外的參數(shù)(變量或?qū)ο?;
        state.is_login = true;
    },
    setLogout(state) {  //同上
        state.is_login = false;
		removeToken();		
    },
    setCurrUid(state,uid){ //同上,這里面的參數(shù)除了state之外還傳了需要增加的值sum
       state.curr_uid=uid;
    }
};
 const actions = {
    setLogin(context) {  //自定義觸發(fā)mutations里函數(shù)的方法,context與store 實(shí)例具有相同方法和屬性
        context.commit('setLogin');
    },
    setLogout(context) {  //同上注釋
        context.commit('setLogout');
    },
    setCurrUid(context,uid){   //同上注釋?zhuān)瑄id為要變化的形參
        context.commit('setCurrUid',uid)
     }
};
export default {
    namespaced: true, //用于在全局引用此文里的方法時(shí)標(biāo)識(shí)這一個(gè)的文件名
    state,
    getters,
    mutations,
    actions
}

這里引入了token緩存的清除處理功能是額外的,先看基本功能實(shí)現(xiàn)了登錄狀態(tài)的設(shè)置讀寫(xiě),當(dāng)前uid設(shè)置讀寫(xiě),公開(kāi)的讀寫(xiě)的相應(yīng)調(diào)用方法。

login.vue  ,我們?cè)诘卿涰?yè)面調(diào)用生成狀態(tài)數(shù)據(jù)的寫(xiě)入

import { setToken } from 'common/auth.js';
import { mapActions} from 'vuex'; 
export default {
....
methods: {
		...mapActions('user', ['setLogin','setCurrUid']),
		submit() {
			const _self = this;
...
            postLogin({ username:v_username,password:v_password }).then(res => {
                if(res.code==0){
					uni.$u.toast('登錄成功');
                    _self.$store.dispatch("user/setLogin");
					_self.$store.dispatch("user/setCurrUid",res.data.uid);
...

這里我們把關(guān)鍵調(diào)用代碼寫(xiě)出,這里是調(diào)用狀態(tài)模塊user的寫(xiě)入方法進(jìn)行登錄狀態(tài)、用戶(hù)uid的寫(xiě)入。

user.vue 我們這里讀取登錄狀態(tài),用戶(hù)uid信息

import { mapGetters} from 'vuex';
 
export default {
...
    computed:{
		...mapGetters('user',{ //用mapGetters來(lái)獲取user.js里面的getters
			isLogin:'isLogin',  currUid:'getCurrUid'
		})
	},	
 
    onLoad() {
		this.initData();
	},
	methods: {
		initData() {
            console.log("initData.store=",this.$store);
            console.log('init.isLogin=',this.isLogin);
			console.log('init.currUid=',this.currUid);
...
 

這里我們通過(guò)vue的computed方法注入從store組件的mapGetters設(shè)置的狀態(tài)數(shù)據(jù)。后續(xù)代碼就可以從這里讀取狀態(tài)數(shù)據(jù)了。

我們打印store對(duì)象結(jié)構(gòu),幫助理解store對(duì)象的存儲(chǔ)結(jié)構(gòu)

我們看到store對(duì)象的存儲(chǔ)結(jié)構(gòu),就是一個(gè)對(duì)象,封裝的屬性方法,和我們定義的js文件中某些方法、屬性相對(duì)應(yīng)。我們按照它的語(yǔ)法結(jié)構(gòu)來(lái)訪(fǎng)問(wèn)就可以了。

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

相關(guān)文章

  • vite2打包的時(shí)候vendor-xxx.js文件過(guò)大的解決方法

    vite2打包的時(shí)候vendor-xxx.js文件過(guò)大的解決方法

    vite2是一個(gè)非常好用的工具,只是隨著代碼的增多,打包的時(shí)候?vendor-xxxxxx.js?文件也越來(lái)越大,本文主要介紹了vite2打包的時(shí)候vendor-xxx.js文件過(guò)大的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue金額格式化保留兩位小數(shù)的實(shí)現(xiàn)

    vue金額格式化保留兩位小數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了vue金額格式化保留兩位小數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • VUE3基于vite封裝條形碼和二維碼組件的詳細(xì)過(guò)程

    VUE3基于vite封裝條形碼和二維碼組件的詳細(xì)過(guò)程

    基礎(chǔ)組件開(kāi)發(fā)是項(xiàng)目業(yè)務(wù)開(kāi)發(fā)的基石, 本文主要介紹了通過(guò)vue3的vite腳手架快速搭建項(xiàng)目, 開(kāi)發(fā)條形碼和二維碼組件的過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • webpack安裝配置與常見(jiàn)使用過(guò)程詳解(結(jié)合vue)

    webpack安裝配置與常見(jiàn)使用過(guò)程詳解(結(jié)合vue)

    這篇文章主要介紹了webpack安裝配置與常見(jiàn)使用過(guò)程,主要結(jié)合vue實(shí)現(xiàn),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 聊聊Vue 中 title 的動(dòng)態(tài)修改問(wèn)題

    聊聊Vue 中 title 的動(dòng)態(tài)修改問(wèn)題

    這篇文章主要介紹了 Vue 中 title 的動(dòng)態(tài)修改問(wèn)題,文中通過(guò)兩種方案給大家介紹了title的傳遞問(wèn)題 ,需要的朋友可以參考下
    2019-06-06
  • 在Vue2中注冊(cè)全局組件的兩種方法詳解

    在Vue2中注冊(cè)全局組件的兩種方法詳解

    這篇文章主要介紹了在Vue2中注冊(cè)全局組件的兩種方法,非常的細(xì)致,需要的朋友可以參考下
    2022-07-07
  • 詳解vue保存自動(dòng)格式化換行

    詳解vue保存自動(dòng)格式化換行

    這篇文章主要為大家介紹了vue保存自動(dòng)格式化換行,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Vue如何實(shí)現(xiàn)u-form多個(gè)form表單同時(shí)校驗(yàn)

    Vue如何實(shí)現(xiàn)u-form多個(gè)form表單同時(shí)校驗(yàn)

    在 Vue 項(xiàng)目中使用 UView UI 的 u-form 組件時(shí),多個(gè)表單同時(shí)校驗(yàn)的需求非常常見(jiàn),本文主要介紹了如何使用 u-form 組件實(shí)現(xiàn)多個(gè)表單同時(shí)校驗(yàn),需要的可以參考一下
    2025-01-01
  • vue3 學(xué)習(xí)筆記之a(chǎn)xios的使用變化總結(jié)

    vue3 學(xué)習(xí)筆記之a(chǎn)xios的使用變化總結(jié)

    本篇文章主要旨在幫助正在學(xué)vue3或者準(zhǔn)備學(xué)vue3的同學(xué)了解網(wǎng)絡(luò)請(qǐng)求axios該如何使用,防止接觸了一點(diǎn)點(diǎn)vue3的同學(xué)會(huì)有個(gè)疑問(wèn)。有興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • VueRouter?原理解讀之初始化流程

    VueRouter?原理解讀之初始化流程

    這篇文章主要為大家介紹了VueRouter原理解讀之初始化流程實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05

最新評(píng)論

衡阳市| 门头沟区| 江源县| 桐梓县| 吐鲁番市| 兴山县| 定安县| 安平县| 潢川县| 青川县| 小金县| 吉水县| 宁阳县| 望奎县| 吉木乃县| 崇礼县| 大兴区| 城口县| 东阳市| 泾川县| 荔波县| 茶陵县| 成安县| 区。| 延寿县| 灵川县| 溧水县| 紫云| 绿春县| 铁岭市| 库尔勒市| 汝州市| 环江| 江北区| 黑河市| 秦安县| 炎陵县| 普安县| 繁峙县| 光山县| 林周县|