6.求和案列_Vuex中的mapMutations
假如说actions中的方法没有逻辑,那么我们可以直接在Vue中直接传入Mutations。
main.js
import Vue from 'vue' // 引入阉割版本的vue import App from './App.vue' // 引入App.vue组件 import store from './vuex/store' // 引入vuex Vue.config.productionTip = false; const vm=new Vue({ store: store, // TODO: 这里只有当我们应用了vuex才会被Vue自动管理。 --> store.js--->Vue.use() render: h => h(App) }).$mount('#app'); console.log('vm',vm)
main.js
注释普通+和- // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值 // context.commit('JIA_jsxs', value); // 通知mutations去 // console.log(context, value); // }, // describe_jia(context, value) { // context.commit('describe_jsxs', value); // },
import Vue from 'vue' // 目的是调用: use() import Vuex from 'vuex' // 引入插件vuex Vue.use(Vuex) // 应用Vuex // 初始化状态->需要写成一个对象,要管理n多个组件的状态 const state_jsxs = { sum: 0, name: 'jsxs' } // 创建一个actions,值为一个对象,包含n个响应组件"动作"的函数---> 可以拿到分发的值 const actions_jsxs = { // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值 // context.commit('JIA_jsxs', value); // 通知mutations去 // console.log(context, value); // }, Async_jia(context, value) { setTimeout(() => { context.commit('Async_jsxs', value); }, 500) }, // describe_jia(context, value) { // context.commit('describe_jsxs', value); // }, incrementOdd_jia(context, value) { context.commit('incrementOdd_jsxs', value); }, } // 加工状态: 这里可以拿到状态设定的值 const mutations_jsxs = { JIA_jsxs(state_1, value) { // Todo: 这里的第一个参数是是一个对象里面可以获取state状态(),value是分发传递的值 state_1.sum += value }, Async_jsxs(state_2, value) { state_2.sum += value }, describe_jsxs(state_3, value) { state_3.sum -= value }, incrementOdd_jsxs(state_4, value) { if (state_4.sum % 2) { state_4.sum += value; } } } // getters中配置的是state经过加工后的值--- 类似于Vue中的computed const getters_jsxs = { // TODO: 必须需要是返回值 demo(state_5, value) { // 第一个参数是: $state。第二个参数是传递过来的值。 return state_5.sum*100 } } // TODO: 创建Store 用于管理: state对象、mutations对象 const store = new Vuex.Store({ state: state_jsxs, actions: actions_jsxs, mutations: mutations_jsxs, getters:getters_jsxs }) // TODO: 抛出store export default store
count.vue
调用的一定要添加参数 <button @click="increment(n)">+</button> <button @click="describe(n)">-</button> 传递普通+ methods:{ // increment(value) { // this.$store.commit('JIA_jsxs',value) // }, ...mapMutations({ //这里相当于上面的操作 increment: "JIA_jsxs", }), 传递普通- // describe() { //这里相当于上面的操作 // this.$store.commit("describe_jia", this.n); // }, ...mapMutations({ describe:'describe_jsxs' }), }
<template> <div> <h2>当前求和未: {{ sum_t }}</h2> <h2>乘以100之后: {{ beiSum }}</h2> <h2>名字是: {{ usernames }}</h2> <!-- v-model.number意思是: 我们接受到的数据是数值 --> <select name="" id="" v-model.number="n"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option></select > <button @click="increment(n)">+</button> <button @click="describe(n)">-</button> <button @click="incrementOdd">奇数再加</button> <button @click="incrementAsyn">异步加</button> </div> </template> <script> // Todo: 这里需要使用到{} import { mapGetters, mapState, mapMutations } from "vuex"; export default { name: "Count", data() { return { n: 1, // }; }, computed: { // 为什么要用三个点,目的是把mapState给摊开。为什么要摊开,因为不能有 { {} } ...mapState({ sum_t: "sum", usernames: "name", }), ...mapGetters({ beiSum: "demo", }), }, methods: { // 靠自己写方法、直接提交到Mutations // increment(value) { // this.$store.commit('JIA_jsxs',value) // }, ...mapMutations({ increment: "JIA_jsxs", }), incrementAsyn() { this.$store.dispatch("Async_jia", this.n); }, // describe() { // this.$store.commit("describe_jia", this.n); // }, ...mapMutations({ describe:'describe_jsxs' }), incrementOdd() { this.$store.dispatch("incrementOdd_jia", this.n); }, }, }; </script> <style> </style>
7.求和案列_Vuex中的mapActions
App.vue
<template> <div> <Count/> </div> </template> <script> import Count from './components/Count.vue' export default { name:'App', components:{ Count, } } </script> <style> </style>
main.js
import Vue from 'vue' // 引入阉割版本的vue import App from './App.vue' // 引入App.vue组件 import store from './vuex/store' // 引入vuex Vue.config.productionTip = false; const vm=new Vue({ store: store, // TODO: 这里只有当我们应用了vuex才会被Vue自动管理。 --> store.js--->Vue.use() render: h => h(App) }).$mount('#app'); console.log('vm',vm)
store.js
保持不动
import Vue from 'vue' // 目的是调用: use() import Vuex from 'vuex' // 引入插件vuex Vue.use(Vuex) // 应用Vuex // 初始化状态->需要写成一个对象,要管理n多个组件的状态 const state_jsxs = { sum: 0, name: 'jsxs' } // 创建一个actions,值为一个对象,包含n个响应组件"动作"的函数---> 可以拿到分发的值 const actions_jsxs = { // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值 // context.commit('JIA_jsxs', value); // 通知mutations去 // console.log(context, value); // }, Async_jia(context, value) { setTimeout(() => { context.commit('Async_jsxs', value); }, 500) }, // describe_jia(context, value) { // context.commit('describe_jsxs', value); // }, incrementOdd_jia(context, value) { context.commit('incrementOdd_jsxs', value); }, } // 加工状态: 这里可以拿到状态设定的值 const mutations_jsxs = { JIA_jsxs(state_1, value) { // Todo: 这里的第一个参数是是一个对象里面可以获取state状态(),value是分发传递的值 state_1.sum += value }, Async_jsxs(state_2, value) { state_2.sum += value }, describe_jsxs(state_3, value) { state_3.sum -= value }, incrementOdd_jsxs(state_4, value) { if (state_4.sum % 2) { state_4.sum += value; } } } // getters中配置的是state经过加工后的值--- 类似于Vue中的computed const getters_jsxs = { // TODO: 必须需要是返回值 demo(state_5, value) { // 第一个参数是: $state。第二个参数是传递过来的值。 return state_5.sum*100 } } // TODO: 创建Store 用于管理: state对象、mutations对象 const store = new Vuex.Store({ state: state_jsxs, actions: actions_jsxs, mutations: mutations_jsxs, getters:getters_jsxs }) // TODO: 抛出store export default store
count.vue
methods{ // incrementOdd(value) { // this.$store.dispatch("incrementOdd_jia", value); // }, // incrementAsyn() { // this.$store.dispatch("Async_jia", this.n); // }, ...mapActions({ incrementOdd:'incrementOdd_jia', //可以替换掉上面的 incrementAsyn:'Async_jia' // 可以替换上面的 }) }
<template> <div> <h2>当前求和未: {{ sum_t }}</h2> <h2>乘以100之后: {{ beiSum }}</h2> <h2>名字是: {{ usernames }}</h2> <!-- v-model.number意思是: 我们接受到的数据是数值 --> <select name="" id="" v-model.number="n"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option></select > <button @click="increment(n)">+</button> <button @click="describe(n)">-</button> <button @click="incrementOdd(n)">奇数再加</button> <button @click="incrementAsyn(n)">异步加</button> </div> </template> <script> // Todo: 这里需要使用到{} import { mapGetters, mapState, mapMutations,mapActions } from "vuex"; export default { name: "Count", data() { return { n: 1, // }; }, computed: { // 为什么要用三个点,目的是把mapState给摊开。为什么要摊开,因为不能有 { {} } ...mapState({ sum_t: "sum", usernames: "name", }), ...mapGetters({ beiSum: "demo", }), }, methods: { // 靠自己写方法、直接提交到Mutations // increment(value) { // this.$store.commit('JIA_jsxs',value) // }, ...mapMutations({ increment: "JIA_jsxs", }), // describe() { // this.$store.commit("describe_jia", this.n); // }, ...mapMutations({ describe:'describe_jsxs' }), // incrementOdd(value) { // this.$store.dispatch("incrementOdd_jia", value); // }, // incrementAsyn() { // this.$store.dispatch("Async_jia", this.n); // }, ...mapActions({ incrementOdd:'incrementOdd_jia', incrementAsyn:'Async_jia' }) }, }; </script> <style> </style>
8.求和案列_Vuex综合应用
App.vue
<template> <div> <Count/> <Person/> </div> </template> <script> import Count from './components/Count.vue' import Person from './components/Person.vue' export default { name:'App', components:{ Count, Person } } </script> <style> </style>
main.js
import Vue from 'vue' // 引入阉割版本的vue import App from './App.vue' // 引入App.vue组件 import store from './vuex/store' // 引入vuex Vue.config.productionTip = false; const vm=new Vue({ store: store, // TODO: 这里只有当我们应用了vuex才会被Vue自动管理。 --> store.js--->Vue.use() render: h => h(App) }).$mount('#app'); console.log('vm',vm)
store.js
import Vue from 'vue' // 目的是调用: use() import Vuex from 'vuex' // 引入插件vuex Vue.use(Vuex) // 应用Vuex // 初始化状态->需要写成一个对象,要管理n多个组件的状态 const state_jsxs = { sum: 0, name: 'jsxs' } // 创建一个actions,值为一个对象,包含n个响应组件"动作"的函数---> 可以拿到分发的值 const actions_jsxs = { // jia(context, value) { // context 是一个迷你版的$store。我们要用context.commit()去通知mutations加工状态。 value是分发传递的值 // context.commit('JIA_jsxs', value); // 通知mutations去 // console.log(context, value); // }, Async_jia(context, value) { setTimeout(() => { context.commit('Async_jsxs', value); }, 500) }, // describe_jia(context, value) { // context.commit('describe_jsxs', value); // }, incrementOdd_jia(context, value) { context.commit('incrementOdd_jsxs', value); }, } // 加工状态: 这里可以拿到状态设定的值 const mutations_jsxs = { JIA_jsxs(state_1, value) { // Todo: 这里的第一个参数是是一个对象里面可以获取state状态(),value是分发传递的值 state_1.sum += value }, Async_jsxs(state_2, value) { state_2.sum += value }, describe_jsxs(state_3, value) { state_3.sum -= value }, incrementOdd_jsxs(state_4, value) { if (state_4.sum % 2) { state_4.sum += value; } } } // getters中配置的是state经过加工后的值--- 类似于Vue中的computed const getters_jsxs = { // TODO: 必须需要是返回值 demo(state_5, value) { // 第一个参数是: $state。第二个参数是传递过来的值。 return state_5.sum*100 } } // TODO: 创建Store 用于管理: state对象、mutations对象 const store = new Vuex.Store({ state: state_jsxs, actions: actions_jsxs, mutations: mutations_jsxs, getters:getters_jsxs }) // TODO: 抛出store export default store
count.vue
<template> <div> <h2>当前求和未: {{ sum_t }}</h2> <h2>乘以100之后: {{ beiSum }}</h2> <h2>名字是: {{ usernames }}</h2> <!-- v-model.number意思是: 我们接受到的数据是数值 --> <select name="" id="" v-model.number="n"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option></select > <button @click="increment(n)">+</button> <button @click="describe(n)">-</button> <button @click="incrementOdd(n)">奇数再加</button> <button @click="incrementAsyn(n)">异步加</button> </div> </template> <script> // Todo: 这里需要使用到{} import { mapGetters, mapState, mapMutations,mapActions } from "vuex"; export default { name: "Count", data() { return { n: 1, // }; }, computed: { // 为什么要用三个点,目的是把mapState给摊开。为什么要摊开,因为不能有 { {} } ...mapState({ sum_t: "sum", usernames: "name", }), ...mapGetters({ beiSum: "demo", }), }, methods: { // 靠自己写方法、直接提交到Mutations // increment(value) { // this.$store.commit('JIA_jsxs',value) // }, ...mapMutations({ increment: "JIA_jsxs", }), // describe() { // this.$store.commit("describe_jia", this.n); // }, ...mapMutations({ describe:'describe_jsxs' }), // incrementOdd(value) { // this.$store.dispatch("incrementOdd_jia", value); // }, // incrementAsyn() { // this.$store.dispatch("Async_jia", this.n); // }, ...mapActions({ incrementOdd:'incrementOdd_jia', incrementAsyn:'Async_jia' }) }, }; </script> <style> </style>
Person.vue
获取总和
<template> <div class="p"> <h2>我是Person组件</h2> <h3>求和为: {{sum}}</h3> </div> </template> <script> name:'Person'; export default { computed:{ sum(){ return this.$store.state.sum; } } } </script> <style> .p{ background-color: beige; padding: 10px } </style>