vuexにおけるthis.$store.dispatch()とthis.$store.commit()メソッドの違い
12068 ワード
this.$store.dispatch()
とthis.$store.commit()
の方法の違いは総じてアクセス方式の違いにすぎず、両方の方法はvuexに値を伝達するmutation変更state this.$store.dispatch()
:非同期操作を含み、例えばバックグラウンドにデータを提出し、書き方:this.$store.dispatch(‘action ’, )
this.$store.commit()
:同期操作、書き方:this.$store.commit(‘mutations ’, )
commit:同期操作this.$store.commit('changeValue',name)
this.$store.state.changeValue
this.$store.dispatch('getlists',name)
this.$store.getters.getlists
Vuexファイルsrc/store/index.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export const store = new Vuex.Store({
// state
state: {
//
login: false
},
// mutations: , state
mutations: {
//
doLogin(state) {
state.login = true;
},
//
doLogout(state) {
state.login = false;
}
}
});
コンポーネントJS部:src/components/Header.vue
<script>
// vux mapState
import { mapState } from "vuex";
export default {
// : ,
name: "Header",
// vuex store state , !
computed: {
// mapState , store
// login , store state login,
...mapState(["login"])
},
methods: {
logout() {
this.$store.commit("doLogout");
}
}
};
script>
コンポーネントJS部:src/components/LOgin.vue
<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(" , ! ");
//
this.$router.push({ path: "/" });
// vuex state , mutations
// commit(' ') mutations
this.$store.commit("doLogin");
} else {
alert(" , !");
}
})
.catch(err => {
console.error(err);
});
}
}
};
script>