• Vue(八)——Vuex


    目录

    理解vuex

    求和案例

    纯vue版

    搭建vuex环境

    vuex版

    getters配置项

    四个Map方法的使用

    mapState与mapGetters

    mapMutations与mapActions

    多组件共享数据

    vuex模块化编码


    理解vuex

    概念:

            在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态(数据)进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

    多组件共享数据——全局事件总线实现(让所有组件都可以读写x和y)

    多组件共享数据——vuex实现

    什么时候使用vuex?

    1.多个组件依赖于同一状态(数据)
    2.来自不同组件的行为需要变更同一状态(数据)

    工作原理图:

            我们所说的将数据交给vuex去管理,就是交给State对象去管理。这个actions主要处理mounted,向服务器发异步请求,然后获取数据,修改,保存到state仓库中,然后通过mapState组件能拿到,然后进行遍历数组动态展示数据,这就是前台项目的大部分功能。

    1.A M S 都是对象

    2.A M S都要经过store的领导

    3.需要在任何一个组件里调dispatch、commit,而dispatch、commit都在store身上。这就需要所有的组件实例对象vc都能看见store。

    求和案例

    纯vue版

    option里的值如果不处理会被当成字符串而无法进行运算

    Count.vue

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{sum}}h1>
    4. <select v-model.number="n">
    5. <option value="1">1option>
    6. <option value="2">2option>
    7. <option value="3">3option>
    8. select>
    9. <button @click="increment">+button>
    10. <button @click="decrement">-button>
    11. <button @click="incrementOdd">当前求和为奇数再加button>
    12. <button @click="incrementWait">等一等再加button>
    13. div>
    14. template>
    15. <script>
    16. export default {
    17. name:'Count',
    18. data() {
    19. return {
    20. n:1, //用户选择的数字
    21. sum:0 //当前的和
    22. }
    23. },
    24. methods: {
    25. increment(){
    26. this.sum += this.n
    27. },
    28. decrement(){
    29. this.sum -= this.n
    30. },
    31. incrementOdd(){
    32. if(this.sum % 2){
    33. this.sum += this.n
    34. }
    35. },
    36. incrementWait(){
    37. setTimeout(()=>{
    38. this.sum += this.n
    39. },500)
    40. },
    41. },
    42. }
    43. script>
    44. <style lang="css">
    45. button{
    46. margin-left: 5px;
    47. }
    48. style>

    App.vue

    1. <template>
    2. <div>
    3. <Count/>
    4. div>
    5. template>
    6. <script>
    7. import Count from './components/Count'
    8. export default {
    9. name:'App',
    10. components:{Count},
    11. }
    12. script>

    main.js

    1. //引入Vue
    2. import Vue from 'vue'
    3. //引入App
    4. import App from './App.vue'
    5. //引入插件
    6. import vueResource from 'vue-resource'
    7. //关闭Vue的生产提示
    8. Vue.config.productionTip = false
    9. //使用插件
    10. Vue.use(vueResource)
    11. //创建vm
    12. new Vue({
    13. el:'#app',
    14. render: h => h(App),
    15. beforeCreate() {
    16. Vue.prototype.$bus = this
    17. }
    18. })

    搭建vuex环境

    1. 下载 Vuex:npm i vuex(npm i vuex@3)

    让所有的vc和vm都有一个store

    没引入vuex之前,vue是不认识store的

    引入vuex之后,vue就认识这个store了。

    App的组件实例对象也有store

    2.创建src/store/index.js: 

    该文件用于创建Vuex中最为核心的store(根据原理图,store需包含actions、mutations、state)

    1. //引入Vue核心库
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //应用Vuex插件
    6. Vue.use(Vuex)
    7. //准备actions对象——响应组件中用户的动作、处理业务逻辑
    8. const actions = {}
    9. //准备mutations对象——修改state中的数据
    10. const mutations = {}
    11. //准备state对象——保存具体的数据
    12. const state = {}
    13. //创建并暴露store
    14. export default new Vuex.Store({
    15. //key和value重名了可以触发简写形式
    16. actions,
    17. mutations,
    18. state,
    19. })

    3.在src/main.js中创建 vm 时传入store配置项:

    1. import Vue from 'vue'
    2. import App from './App.vue'
    3. import Vuex from 'vuex'
    4. //引入store
    5. import store from './store'
    6. Vue.config.productionTip = false
    7. Vue.use(Vuex)
    8. new Vue({
    9. el:"#app",
    10. render: h => h(App),
    11. store
    12. })

    vuex版

    ./components/Count.vue

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{$store.state.sum}}h1>
    4. <select v-model.number="n">
    5. <option value="1">1option>
    6. <option value="2">2option>
    7. <option value="3">3option>
    8. select>
    9. <button @click="increment">+button>
    10. <button @click="decrement">-button>
    11. <button @click="incrementOdd">当前求和为奇数再加button>
    12. <button @click="incrementWait">等一等再加button>
    13. div>
    14. template>
    15. <script>
    16. export default {
    17. name:'Count',
    18. data() {
    19. return {
    20. n:1, //用户选择的数字
    21. }
    22. },
    23. methods: {
    24. increment(){
    25. //可直接commit给mutations
    26. this.$store.commit('JIA',this.n)
    27. },
    28. decrement(){
    29. //可直接commit给mutations
    30. this.$store.commit('JIAN',this.n)
    31. },
    32. incrementOdd(){
    33. //dispatch到actions
    34. this.$store.dispatch('jiaOdd',this.n)
    35. },
    36. incrementWait(){
    37. this.$store.dispatch('jiaWait',this.n)
    38. },
    39. },
    40. mounted() {
    41. console.log('Count',this)
    42. },
    43. }
    44. script>
    45. <style lang="css">
    46. button{
    47. margin-left: 5px;
    48. }
    49. style>

     

    ./store/index.js

    1. //该文件用于创建Vuex中最为核心的store
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //应用Vuex插件
    6. Vue.use(Vuex)
    7. //准备actions——用于响应组件中的动作
    8. const actions = {
    9. /* jia(context,value){
    10. //参数1是上下文对象,里面包含了可能用到的方法(例如commit),参数2是所传过来的参数值
    11. console.log('actions中的jia被调用了')
    12. context.commit('JIA',value)
    13. },
    14. jian(context,value){
    15. console.log('actions中的jian被调用了')
    16. context.commit('JIAN',value)
    17. }, */
    18. jiaOdd(context,value){
    19. console.log('actions中的jiaOdd被调用了')
    20. if(context.state.sum % 2){
    21. context.commit('JIA',value)
    22. }
    23. },
    24. jiaWait(context,value){
    25. console.log('actions中的jiaWait被调用了')
    26. setTimeout(()=>{
    27. context.commit('JIA',value)
    28. },500)
    29. }
    30. }
    31. //准备mutations——用于操作数据(state)
    32. const mutations = {
    33. JIA(state,value){
    34. console.log('mutations中的JIA被调用了')
    35. state.sum += value
    36. },
    37. JIAN(state,value){
    38. console.log('mutations中的JIAN被调用了')
    39. state.sum -= value
    40. }
    41. }
    42. //准备state——用于存储数据
    43. const state = {
    44. sum:0 //当前的和
    45. }
    46. //创建并暴露store
    47. export default new Vuex.Store({
    48. actions,
    49. mutations,
    50. state,
    51. })

    参数中的state

    App.vue

    1. <template>
    2. <div>
    3. <Count/>
    4. div>
    5. template>
    6. <script>
    7. import Count from './components/Count'
    8. export default {
    9. name:'App',
    10. components:{Count},
    11. mounted() {
    12. // console.log('App',this)
    13. },
    14. }
    15. script>

    main.js

    1. //引入Vue
    2. import Vue from 'vue'
    3. //引入App
    4. import App from './App.vue'
    5. //引入插件
    6. import vueResource from 'vue-resource'
    7. //引入store
    8. import store from './store'
    9. //关闭Vue的生产提示
    10. Vue.config.productionTip = false
    11. //使用插件
    12. Vue.use(vueResource)
    13. //创建vm
    14. new Vue({
    15. el:'#app',
    16. render: h => h(App),
    17. store,
    18. beforeCreate() {
    19. Vue.prototype.$bus = this
    20. }
    21. })

    使用步骤:

    1.初始化数据、配置```actions```、配置```mutations```,操作文件```store.js```

    1. //引入Vue核心库
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //引用Vuex
    6. Vue.use(Vuex)
    7. const actions = {
    8. //响应组件中加的动作
    9. jia(context,value){
    10. // console.log('actions中的jia被调用了',miniStore,value)
    11. context.commit('JIA',value)//大写为mutations中的方法
    12. },
    13. }
    14. const mutations = {
    15. //执行加
    16. JIA(state,value){
    17. // console.log('mutations中的JIA被调用了',state,value)
    18. state.sum += value
    19. }
    20. }
    21. //初始化数据
    22. const state = {
    23. sum:0
    24. }
    25. //创建并暴露store
    26. export default new Vuex.Store({
    27. actions,
    28. mutations,
    29. state,
    30. })

    2.组件中读取vuex中的数据:```$store.state.sum```

    3.组件中修改vuex中的数据:

    ```$store.dispatch('action中的方法名',数据)``` 或 ```$store.commit('mutations中的方法名',数据)```

    vuex开发者工具的使用

    页面所呈现的数据一定是绿色条所在的数据

    每一条后面三个按钮的作用

    getters配置项

    1. 概念:当state中的数据需要经过加工后再使用时,可以使用getters加工

    求和案例

    提出需求如下:

    index.js中添加getters配置项,别忘了在store里配置进去getters

    读取getters的返回值数据

    1.概念:当state中的数据需要经过加工后再使用时,可以使用getters加工

    2.在store.js中追加getters配置

    1. ...
    2. const getters = {
    3. bigSum(state){
    4. return state.sum * 10
    5. }
    6. }
    7. //创建并暴露store
    8. export default new Vuex.Store({
    9. ...
    10. getters
    11. })
    3.组件中读取数据: $store.getters.bigSum

    四个Map方法的使用

    往state中添加两个数据

    在组件中引入

    效果

    问题:当使用vuex中很多数据时,就会重复使用这些

    1.靠程序员自己亲自去写计算属性

    mapState与mapGetters

    看一下mapState干了什么活

    在数组写法当中一个sum干了两件事,1.作为计算属性   2.寻找state当中的值

    如果要用数组写法,那么计算属性的名和读取出来的名要一致。

    ./components/Count.vue

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{sum}}h1>
    4. <h3>当前求和放大10倍为:{{bigSum}}h3>
    5. <h3>我在{{school}},学习{{subject}}h3>
    6. <select v-model.number="n">
    7. <option value="1">1option>
    8. <option value="2">2option>
    9. <option value="3">3option>
    10. select>
    11. <button @click="increment">+button>
    12. <button @click="decrement">-button>
    13. <button @click="incrementOdd">当前求和为奇数再加button>
    14. <button @click="incrementWait">等一等再加button>
    15. div>
    16. template>
    17. <script>
    18. import {mapState,mapGetters} from 'vuex'
    19. export default {
    20. name:'Count',
    21. data() {
    22. return {
    23. n:1, //用户选择的数字
    24. }
    25. },
    26. computed:{
    27. //靠程序员自己亲自去写计算属性
    28. /* sum(){
    29. return this.$store.state.sum
    30. },
    31. school(){
    32. return this.$store.state.school
    33. },
    34. subject(){
    35. return this.$store.state.subject
    36. }, */
    37. //借助mapState生成计算属性,从state中读取数据。(对象写法)
    38. // ...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),
    39. //借助mapState生成计算属性,从state中读取数据。(数组写法)
    40. ...mapState(['sum','school','subject']),
    41. /* ******************************************************************** */
    42. /* bigSum(){
    43. return this.$store.getters.bigSum
    44. }, */
    45. //借助mapGetters生成计算属性,从getters中读取数据。(对象写法)
    46. // ...mapGetters({bigSum:'bigSum'})
    47. //借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
    48. ...mapGetters(['bigSum'])
    49. },
    50. methods: {
    51. increment(){
    52. this.$store.commit('JIA',this.n)
    53. },
    54. decrement(){
    55. this.$store.commit('JIAN',this.n)
    56. },
    57. incrementOdd(){
    58. this.$store.dispatch('jiaOdd',this.n)
    59. },
    60. incrementWait(){
    61. this.$store.dispatch('jiaWait',this.n)
    62. },
    63. },
    64. mounted() {
    65. const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
    66. console.log(x)
    67. },
    68. }
    69. script>
    70. <style lang="css">
    71. button{
    72. margin-left: 5px;
    73. }
    74. style>

    1.mapState方法:用于帮助我们映射state中的数据

    1. computed: {
    2. //借助mapState生成计算属性:sum、school、subject(对象写法)
    3. ...mapState({sum:'sum',school:'school',subject:'subject'}),
    4. //借助mapState生成计算属性:sum、school、subject(数组写法)
    5. ...mapState(['sum','school','subject']),
    6. },

    2.mapGetters方法:用于帮助我们映射getters中的数据

    1. computed: {
    2. //借助mapGetters生成计算属性:bigSum(对象写法)
    3. ...mapGetters({bigSum:'bigSum'}),
    4. //借助mapGetters生成计算属性:bigSum(数组写法)
    5. ...mapGetters(['bigSum'])
    6. },

    mapMutations与mapActions

    ./components/Count.vue

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{sum}}h1>
    4. <h3>当前求和放大10倍为:{{bigSum}}h3>
    5. <h3>我在{{school}},学习{{subject}}h3>
    6. <select v-model.number="n">
    7. <option value="1">1option>
    8. <option value="2">2option>
    9. <option value="3">3option>
    10. select>
    11. <button @click="increment(n)">+button>
    12. <button @click="decrement(n)">-button>
    13. <button @click="incrementOdd(n)">当前求和为奇数再加button>
    14. <button @click="incrementWait(n)">等一等再加button>
    15. div>
    16. template>
    17. <script>
    18. import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
    19. export default {
    20. name:'Count',
    21. data() {
    22. return {
    23. n:1, //用户选择的数字
    24. }
    25. },
    26. computed:{
    27. //借助mapState生成计算属性,从state中读取数据。(对象写法)
    28. // ...mapState({he:'sum',xuexiao:'school',xueke:'subject'}),
    29. //借助mapState生成计算属性,从state中读取数据。(数组写法)
    30. ...mapState(['sum','school','subject']),
    31. /* ******************************************************************** */
    32. //借助mapGetters生成计算属性,从getters中读取数据。(对象写法)
    33. // ...mapGetters({bigSum:'bigSum'})
    34. //借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
    35. ...mapGetters(['bigSum'])
    36. },
    37. methods: {
    38. //程序员亲自写方法
    39. /* increment(){
    40. this.$store.commit('JIA',this.n)
    41. },
    42. decrement(){
    43. this.$store.commit('JIAN',this.n)
    44. }, */
    45. //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)
    46. ...mapMutations({increment:'JIA',decrement:'JIAN'}),
    47. //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(数组写法)
    48. // ...mapMutations(['JIA','JIAN']), //需要使用
    49. /* ************************************************* */
    50. //程序员亲自写方法
    51. /* incrementOdd(){
    52. this.$store.dispatch('jiaOdd',this.n)
    53. },
    54. incrementWait(){
    55. this.$store.dispatch('jiaWait',this.n)
    56. }, */
    57. //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法)
    58. ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
    59. //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(数组写法)
    60. // ...mapActions(['jiaOdd','jiaWait'])
    61. },
    62. mounted() {
    63. const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
    64. console.log(x)
    65. },
    66. }
    67. script>
    68. <style lang="css">
    69. button{
    70. margin-left: 5px;
    71. }
    72. style>

            1.mapActions方法:用于帮助我们生成与actions对话的方法,即包含$store.dispatch(xxx)的函数。

    1. methods:{
    2. //靠mapActions生成:incrementOdd、incrementWait(对象形式)
    3. ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
    4. //靠mapActions生成:incrementOdd、incrementWait(数组形式)
    5. ...mapActions(['jiaOdd','jiaWait'])
    6. }

            2.mapMutations方法:用于帮助我们生成与mutations对话的方法,即包含$store.commit(xxx)的函数。

    1. methods:{
    2. //靠mapActions生成:increment、decrement(对象形式)
    3. ...mapMutations({increment:'JIA',decrement:'JIAN'}),
    4. //靠mapMutations生成:JIA、JIAN(对象形式)
    5. ...mapMutations(['JIA','JIAN']),
    6. }

            备注:mapActions与mapMutations使用时,若需要传递参数需要:在模板中绑定事件时传递好参数,否则参数是事件对象(event)。

    多组件共享数据

    需求:一个数据,多个组件共享,在Count里读取personList人数,在Person里读取Count的和。

            index.js里state添加personList属性和值,并在mutations中添加ADD_PERSON方法使之能够给personList添加人。

    新建Person.vue并使用原始方法计算属性,其中可以使用state中的sum,并在template中展示。

    Count.vue使用map,其中可以添加personList,并在template中展示personList.length

    效果:

    src/components/Count.vue:

    1. <template>
    2. <div>
    3. <h1>当前求和为:{{sum}}h1>
    4. <h3>当前求和放大10倍为:{{bigSum}}h3>
    5. <h3>我在{{school}},学习{{subject}}h3>
    6. <h3 style="color:red">Person组件的总人数是:{{personList.length}}h3>
    7. <select v-model.number="n">
    8. <option value="1">1option>
    9. <option value="2">2option>
    10. <option value="3">3option>
    11. select>
    12. <button @click="increment(n)">+button>
    13. <button @click="decrement(n)">-button>
    14. <button @click="incrementOdd(n)">当前求和为奇数再加button>
    15. <button @click="incrementWait(n)">等一等再加button>
    16. div>
    17. template>
    18. <script>
    19. import {mapState,mapGetters,mapMutations,mapActions} from 'vuex'
    20. export default {
    21. name:'Count',
    22. data() {
    23. return {
    24. n:1, //用户选择的数字
    25. }
    26. },
    27. computed:{
    28. //借助mapState生成计算属性,从state中读取数据。(数组写法)
    29. ...mapState(['sum','school','subject','personList']),
    30. //借助mapGetters生成计算属性,从getters中读取数据。(数组写法)
    31. ...mapGetters(['bigSum'])
    32. },
    33. methods: {
    34. //借助mapMutations生成对应的方法,方法中会调用commit去联系mutations(对象写法)
    35. ...mapMutations({increment:'JIA',decrement:'JIAN'}),
    36. //借助mapActions生成对应的方法,方法中会调用dispatch去联系actions(对象写法)
    37. ...mapActions({incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
    38. },
    39. mounted() {
    40. // const x = mapState({he:'sum',xuexiao:'school',xueke:'subject'})
    41. // console.log(x)
    42. },
    43. }
    44. script>
    45. <style lang="css">
    46. button{
    47. margin-left: 5px;
    48. }
    49. style>

    src/components/Person.vue:

    1. <template>
    2. <div>
    3. <h1>人员列表h1>
    4. <h3 style="color:red">Count组件求和为:{{sum}}h3>
    5. <input type="text" placeholder="请输入名字" v-model="name">
    6. <button @click="add">添加button>
    7. <ul>
    8. <li v-for="p in personList" :key="p.id">{{p.name}}li>
    9. ul>
    10. div>
    11. template>
    12. <script>
    13. import {nanoid} from 'nanoid'
    14. export default {
    15. name:'Person',
    16. data() {
    17. return {
    18. name:''
    19. }
    20. },
    21. computed:{
    22. personList(){
    23. return this.$store.state.personList
    24. },
    25. sum(){
    26. return this.$store.state.sum
    27. }
    28. },
    29. methods: {
    30. add(){
    31. const personObj = {id:nanoid(),name:this.name}
    32. this.$store.commit('ADD_PERSON',personObj)
    33. this.name = ''
    34. }
    35. },
    36. }
    37. script>

    src/store/index.js:

    1. //该文件用于创建Vuex中最为核心的store
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //应用Vuex插件
    6. Vue.use(Vuex)
    7. //准备actions——用于响应组件中的动作
    8. const actions = {
    9. /* jia(context,value){
    10. console.log('actions中的jia被调用了')
    11. context.commit('JIA',value)
    12. },
    13. jian(context,value){
    14. console.log('actions中的jian被调用了')
    15. context.commit('JIAN',value)
    16. }, */
    17. jiaOdd(context,value){
    18. console.log('actions中的jiaOdd被调用了')
    19. if(context.state.sum % 2){
    20. context.commit('JIA',value)
    21. }
    22. },
    23. jiaWait(context,value){
    24. console.log('actions中的jiaWait被调用了')
    25. setTimeout(()=>{
    26. context.commit('JIA',value)
    27. },500)
    28. }
    29. }
    30. //准备mutations——用于操作数据(state)
    31. const mutations = {
    32. JIA(state,value){
    33. console.log('mutations中的JIA被调用了')
    34. state.sum += value
    35. },
    36. JIAN(state,value){
    37. console.log('mutations中的JIAN被调用了')
    38. state.sum -= value
    39. },
    40. ADD_PERSON(state,value){
    41. console.log('mutations中的ADD_PERSON被调用了')
    42. state.personList.unshift(value)
    43. }
    44. }
    45. //准备state——用于存储数据
    46. const state = {
    47. sum:0, //当前的和
    48. school:'尚硅谷',
    49. subject:'前端',
    50. personList:[
    51. {id:'001',name:'张三'}
    52. ]
    53. }
    54. //准备getters——用于将state中的数据进行加工
    55. const getters = {
    56. bigSum(state){
    57. return state.sum*10
    58. }
    59. }
    60. //创建并暴露store
    61. export default new Vuex.Store({
    62. actions,
    63. mutations,
    64. state,
    65. getters
    66. })

     src/App.vue:

    1. <template>
    2. <div class="container">
    3. <Count/>
    4. <hr/>
    5. <Person/>
    6. div>
    7. template>
    8. <script>
    9. import Count from './components/Count'
    10. import Person from './components/Person'
    11. export default {
    12. name:'App',
    13. components:{Count,Person}
    14. }
    15. script>

    vuex模块化编码

    目录结构:

    1. 目的:让代码更好维护,让多种数据分类更加明确。

    2. 修改 store.js 

    1. //count.js
    2. const countAbout = {
    3. namespaced:true,//开启命名空间
    4. state:{x:1},
    5. mutations: { ... },
    6. actions: { ... },
    7. getters: {
    8. bigSum(state){
    9. return state.sum * 10
    10. }
    11. }
    12. }
    13. export default countAbout
    14. //person.js
    15. const personAbout = {
    16. namespaced:true,//开启命名空间
    17. state:{ ... },
    18. mutations: { ... },
    19. actions: { ... }
    20. }
    21. export default personAbout
    22. //index.js
    23. //该文件用于创建Vuex中最为核心的store
    24. import Vue from 'vue'
    25. //引入Vuex
    26. import Vuex from 'vuex'
    27. import countOptions from './count'
    28. import personOptions from './person'
    29. //应用Vuex插件
    30. Vue.use(Vuex)
    31. const store = new Vuex.Store({
    32. modules: {
    33. //countAbout:countOptions,
    34. //personAbout:personOptions
    35. countAbout,
    36. personAbout
    37. }
    38. })
    39. export default store

    3. 开启命名空间后,组件中读取state数据:

    1. //方式一:自己直接读取
    2. this.$store.state.personAbout.list
    3. //方式二:借助mapState读取:
    4. ...mapState('countAbout',['sum','school','subject']),

    4. 开启命名空间后,组件中读取getters数据:

    1. //方式一:自己直接读取
    2. this.$store.getters['personAbout/firstPersonName']
    3. //方式二:借助mapGetters读取:
    4. ...mapGetters('countAbout',['bigSum'])

    5. 开启命名空间后,组件中调用dispatch

    1. //方式一:自己直接dispatch
    2. this.$store.dispatch('personAbout/addPersonWang',person)
    3. //方式二:借助mapActions:
    4. ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})

    6. 开启命名空间后,组件中调用commit

    1. //方式一:自己直接commit
    2. this.$store.commit('personAbout/ADD_PERSON',person)
    3. //方式二:借助mapMutations:
    4. ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),
  • 相关阅读:
    Django自定义manage.py命令实现hexo博客迁移
    Node.js躬行记(18)——半吊子的可视化搭建系统
    Java数组遍历深度解析
    如何在3DMax中使用超过16个材质ID通道?
    互联网行业数据安全建设实践方案
    MFC中对编码文件的操作01
    Numpy数组中的运算与拼接,看这篇就够了
    致医生的一封信:感谢“医”路有你,天天好心情
    计算机专业哀鸿遍野:低代码平台和程序员水火不容,马上被取代
    LED台灯控制芯片 LED调光芯片 LED驱动芯片AH6730
  • 原文地址:https://blog.csdn.net/m0_52601969/article/details/127877072