说明:@也就是版本号,一般vue2安装vuex3。
npm i vuex@3.6.2
执行流程如下:
初始化状态:在state
对象中定义了一个名为message
的属性,并将其初始值设置为"启动"。
定义变更函数(mutations):在mutations
对象中定义了一个名为SET_MESSAGE
的函数,该函数接受两个参数:state
和message
。SET_MESSAGE
函数的作用是将state
对象的message
属性设置为传入的message
值。
定义异步操作(actions):在actions
对象中定义了一个名为setMessage
的函数,该函数接受两个参数:commit
和message
。setMessage
函数的作用是调用commit
方法并传入'SET_MESSAGE'
作为第一个参数,以及传入的message
作为第二个参数。这样,commit
方法会将SET_MESSAGE
函数应用于当前模块的状态。
说明:导入store并注册在new Vue()里面。
import Vue from 'vue';
import 'element-ui/lib/theme-chalk/index.css';
import { install } from '@icon-park/vue/es/all';
import '@icon-park/vue/styles/index.css';
import ElementUI from 'element-ui';
import router from "./router/index.js"
import store from "./store/index.js";
import App from './App.vue';
//全局引入echarts
// import * as echarts from 'echarts';
Vue.use(ElementUI);
Vue.use(install)
//导入api文件
import * as API from "@/api"
new Vue({
el:"#app",
router,
store,
beforeCreate() {
// 挂载vue实例原型身上,一般自己添加的原型都以$命名
Vue.prototype.$API = API;
// Vue.prototype.$Echarts=echarts
},
render:(h)=>h(App),
}).$mount();
import Vue from "vue";
import Vuex from "vuex"
import user from "./modules/user"
Vue.use(Vuex)
export default new Vuex.Store({
modules:{
user
}
})
说明:
// user.js
const state = {
// 仓库
message: "启动",
};
// 修改state数据
const mutations = {
SET_MESSAGE(state, message) {
state.message = message;
},
};
//异步
const actions = {
setMessage({ commit }, message) {
commit('SET_MESSAGE', message);
},
};
export default {
namespaced: true,
state,
mutations,
actions,
};
说明:
$store
?是 Vuex 实例的引用,它提供了访问整个应用程序状态的方法。(操作过于复杂)<template>
<div><div>vuex使用</div>
<button @click="change1"> {{ good }}</button>
<div>{{$store.state.user.message}}</div>
<div>{{user}}</div>
</div>
</template>
<script>
import {mapActions, mapMutations, mapState} from "vuex"
export default {
data(){
return{
good:"点击我修改数据"
}
},
methods:{
...mapMutations({
SET_MESSAGE:'user/SET_MESSAGE'
}),
...mapActions({
setMessage:"user/setMessage"
}),
change1(){
// this.$store.dispatch("user/setMessage","传递数据来了")
this.setMessage('数据来了')
}
},
computed: {
//对象的写法
...mapState({
message: state => state.user.message, //里面的具体数据
user:"user" //整个user中的state数据,
}),
}
}
</script>
?