vuex中this.$store.commit和this.$store.dispatch的基本用法實(shí)例
前言
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ū)別總的來(lái)說(shuō)他們只是存取方式的不同,兩個(gè)方法都是傳值給vuex的mutation改變state
區(qū)別
- this.$store.commit()
同步操作
this.$store.commit('方法名',值)【存儲(chǔ)】
this.$store.state.方法名【取值】
- this.$store.dispatch()
異步操作
this.$store.dispatch('方法名',值)【存儲(chǔ)】
this.$store.getters.方法名【取值】
當(dāng)操作行為中含有異步操作:
比如向后臺(tái)發(fā)送請(qǐng)求獲取數(shù)據(jù),就需要使用action的dispatch去完成了。
其他使用commit即可。
commit => mutations,用來(lái)觸發(fā)同步操作的方法。
dispatch =>actions,用來(lái)觸發(fā)異步操作的方法。
在store中注冊(cè)了mutation和action,在組件中用dispatch調(diào)用action,然后action用commit調(diào)用mutation。
實(shí)戰(zhàn)
- this.$store.commit()
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export const store = new Vuex.Store({
// state專門用來(lái)保存 共享的狀態(tài)值
state: {
// 保存登錄狀態(tài)
login: false
},
// mutations: 專門書寫方法,用來(lái)更新 state 中的值
mutations: {
// 登錄
doLogin(state) {
state.login = true;
},
// 退出
doLogout(state) {
state.login = false;
}
}
});
<script>
// 使用vux的 mapState需要引入
import { mapState } from "vuex";
export default {
// 官方推薦: 給組件起個(gè)名字, 便于報(bào)錯(cuò)時(shí)的提示
name: "Header",
// 引入vuex 的 store 中的state值, 必須在計(jì)算屬性中書寫!
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)到首頁(yè)");
// 路由跳轉(zhuǎn)指定頁(yè)面
this.$router.push({ path: "/" });
//更新 vuex 的 state的值, 必須通過(guò) mutations 提供的方法才可以
// 通過(guò) 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("密碼或賬號(hào)不對(duì)")
})
}).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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3實(shí)現(xiàn)監(jiān)聽(tīng)store中state狀態(tài)變化的簡(jiǎn)單方法
- vuex之this.$store.dispatch()與this.$store.commit()的區(qū)別及說(shuō)明
- Vuex的store中的Module用法及說(shuō)明
- vue data中如何獲取使用store中的變量
- vue3中router路由以及vuex的store使用解析
- 在Vue中使用this.$store或者是$route一直報(bào)錯(cuò)的解決
- vue.js的狀態(tài)管理vuex中store的使用詳解
- Vue?關(guān)于Store的用法小結(jié)
相關(guān)文章
Vue3報(bào)錯(cuò)‘defineProps‘?is?not?defined的解決方法
最近工作中遇到vue3中使用defineProps中報(bào)錯(cuò),飄紅,所以這篇文章主要給大家介紹了關(guān)于Vue3報(bào)錯(cuò)‘defineProps‘?is?not?defined的解決方法,需要的朋友可以參考下2023-01-01
vue3+vite3+typescript實(shí)現(xiàn)驗(yàn)證碼功能及表單驗(yàn)證效果
這篇文章主要介紹了vue3+vite3+typescript實(shí)現(xiàn)驗(yàn)證碼功能及表單驗(yàn)證效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
vue-cli和v-charts實(shí)現(xiàn)可視化圖表過(guò)程解析
這篇文章主要介紹了vue-cli和v-charts實(shí)現(xiàn)可視化圖表過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
Vue 使用formData方式向后臺(tái)發(fā)送數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了Vue 使用formData方式向后臺(tái)發(fā)送數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
antd?vue?表格rowSelection選擇框功能的使用方式
這篇文章主要介紹了antd?vue?表格rowSelection選擇框功能的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。2022-12-12
拿來(lái)就用vue-gird-layout組件封裝示例
這篇文章主要介紹了vue-gird-layout組件封裝示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
VUE?Element修改el-input和el-select長(zhǎng)度的具體步驟
這篇文章主要給大家介紹了關(guān)于VUE?Element修改el-input和el-select長(zhǎng)度的具體步驟,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12

