vuex中this.$store.commit和this.$store.dispatch的基本用法實例
前言
this. s t o r e . d i s p a t c h ( ) 與 t h i s . store.dispatch() 與 this. store.dispatch()與this.store.commit()方法的區(qū)別總的來說他們只是存取方式的不同,兩個方法都是傳值給vuex的mutation改變state
區(qū)別
- this.$store.commit()
同步操作
this.$store.commit('方法名',值)【存儲】
this.$store.state.方法名【取值】
- this.$store.dispatch()
異步操作
this.$store.dispatch('方法名',值)【存儲】
this.$store.getters.方法名【取值】
當(dāng)操作行為中含有異步操作:
比如向后臺發(fā)送請求獲取數(shù)據(jù),就需要使用action的dispatch去完成了。
其他使用commit即可。
commit => mutations,用來觸發(fā)同步操作的方法。
dispatch =>actions,用來觸發(fā)異步操作的方法。
在store中注冊了mutation和action,在組件中用dispatch調(diào)用action,然后action用commit調(diào)用mutation。
實戰(zhàn)
- this.$store.commit()
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export const store = new Vuex.Store({
// state專門用來保存 共享的狀態(tài)值
state: {
// 保存登錄狀態(tài)
login: false
},
// mutations: 專門書寫方法,用來更新 state 中的值
mutations: {
// 登錄
doLogin(state) {
state.login = true;
},
// 退出
doLogout(state) {
state.login = false;
}
}
});
<script>
// 使用vux的 mapState需要引入
import { mapState } from "vuex";
export default {
// 官方推薦: 給組件起個名字, 便于報錯時的提示
name: "Header",
// 引入vuex 的 store 中的state值, 必須在計算屬性中書寫!
computed: {
// mapState輔助函數(shù), 可以快速引入store中的值
// 此處的login代表, store文件中的 state 中的 login, 登錄狀態(tài)
...mapState(["login"])
},
methods: {
logout() {
this.$store.commit("doLogout");
}
}
};
</script>
<script>
export default {
name: "Login",
data() {
return {
uname: "",
upwd: ""
};
},
methods: {
doLogin() {
console.log(this.uname, this.upwd);
let data={
uname:this.uname,
upwd:this.upwd
}
this.axios
.post("user_login.php", data)
.then(res => {
console.log(res);
let code = res.data.code;
if (code == 1) {
alert("恭喜您, 登錄成功! 即將跳轉(zhuǎn)到首頁");
// 路由跳轉(zhuǎn)指定頁面
this.$router.push({ path: "/" });
//更新 vuex 的 state的值, 必須通過 mutations 提供的方法才可以
// 通過 commit('方法名') 就可以出發(fā) mutations 中的指定方法
this.$store.commit("doLogin");
} else {
alert("很遺憾, 登陸失敗!");
}
})
.catch(err => {
console.error(err);
});
}
}
};
</script>
- this.$store.dispatch()
toggleSideBar() {
this.$store.dispatch('app/toggleSideBar')
},
async logout() {
await this.$store.dispatch('user/logout')
this.$router.push(`/login?redirect=${this.$route.fullPath}`)
}
const mutations = {
SET_TOKEN: (state, token) => {
state.token = token
},
SET_INTRODUCTION: (state, introduction) => {
state.introduction = introduction
},
SET_NAME: (state, name) => {
state.name = name
},
SET_AVATAR: (state, avatar) => {
state.avatar = avatar
},
SET_ROLES: (state, roles) => {
state.roles = roles
}
}
const actions = {
// user login
login({ commit }, userInfo){
const { username, password,useraccount} = userInfo;
return new Promise((resolve, reject) => {
login(({userName:username,userAccount:useraccount,userPassword:password})).then(response=>{
const data=response;
commit('SET_TOKEN', 1)
setToken(null)
commit('SET_ROLES', 1)
commit('SET_NAME', 1)
commit('SET_AVATAR', 1)
commit('SET_INTRODUCTION', 1)
resolve()
}).catch(error => {
reject(error)
// debugger;
// $Message("密碼或賬號不對")
})
}).catch(error => {
reject(error)
})
}
}
總結(jié)
到此這篇關(guān)于vuex中this.$store.commit和this.$store.dispatch基本用法的文章就介紹到這了,更多相關(guān)vuex this.$store.commit和this.$store.dispatch用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3報錯‘defineProps‘?is?not?defined的解決方法
最近工作中遇到vue3中使用defineProps中報錯,飄紅,所以這篇文章主要給大家介紹了關(guān)于Vue3報錯‘defineProps‘?is?not?defined的解決方法,需要的朋友可以參考下2023-01-01
vue3+vite3+typescript實現(xiàn)驗證碼功能及表單驗證效果
這篇文章主要介紹了vue3+vite3+typescript實現(xiàn)驗證碼功能及表單驗證效果,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04
vue-cli和v-charts實現(xiàn)可視化圖表過程解析
這篇文章主要介紹了vue-cli和v-charts實現(xiàn)可視化圖表過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10
Vue 使用formData方式向后臺發(fā)送數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了Vue 使用formData方式向后臺發(fā)送數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
antd?vue?表格rowSelection選擇框功能的使用方式
這篇文章主要介紹了antd?vue?表格rowSelection選擇框功能的使用方式,具有很好的參考價值,希望對大家有所幫助。以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。2022-12-12
VUE?Element修改el-input和el-select長度的具體步驟
這篇文章主要給大家介紹了關(guān)于VUE?Element修改el-input和el-select長度的具體步驟,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-12-12

