• vuex的模块化和namespaced


    这里主要是将store里面的index.js这个文件变得更加有条理性一点,使得整个代码看起来比较清晰

    主要的变动在于count.vue,person.vue,index.js

    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">下方组件的总人数是:{{personList.length}}</h3>
    7. <select v-model.number="n">
    8. <option value="1">1</option>
    9. <option value="2">2</option>
    10. <option value="3">3</option>
    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 {mapActions, mapGetters, mapMutations, mapState} from 'vuex'
    20. export default {
    21. name:'Count',
    22. data() {
    23. return {
    24. n:1, //用户选择的数字
    25. }
    26. },
    27. computed:{
    28. ...mapState('countAbout',['sum','school','subject']),
    29. ...mapState('personAbout',['personList']),
    30. ...mapGetters('countAbout',['bigSum'])
    31. },
    32. methods: {
    33. //借助mapMutations生成对应的方法,方法中会调用commit去联系mutaions
    34. ...mapMutations('countAbout',{increment:'JIA',decrement:'JIAN'}),
    35. // incrementOdd(){
    36. // this.$store.dispatch('jiaOdd',this.n)
    37. // },
    38. // incrementWait(){
    39. // this.$store.dispatch('jiaWait',this.n)
    40. // },
    41. //
    42. ...mapActions('countAbout',{incrementOdd:'jiaOdd',incrementWait:'jiaWait'})
    43. },
    44. mounted(){
    45. const x =mapState({he:'sum',xuexiao:'school',xueke:'subject'})
    46. console.log(x)
    47. }
    48. }
    49. </script>
    50. <style>
    51. button{
    52. margin-left: 5px;
    53. }
    54. </style>

    person.vue

    1. <template>
    2. <div>
    3. <h1>人员列表</h1>
    4. <h3 style="color:blue">上方组件的求和为{{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.personAbout.personList
    24. },
    25. sum(){
    26. return this.$store.state.countAbout.sum
    27. }
    28. },
    29. methods:{
    30. add(){
    31. const personObj={id:nanoid(),name:this.name}
    32. this.$store.commit('personAbout/ADD_PERSON',personObj)
    33. this.name=''
    34. }
    35. }
    36. }
    37. </script>

    index.js

    1. //该文件用于创建VUex中最为核心的store
    2. import Vue from 'vue'
    3. //引入Vuex
    4. import Vuex from 'vuex'
    5. //应用vuex插件
    6. Vue.use(Vuex)
    7. //求和相关配置
    8. const countOptions ={
    9. namespaced:true,
    10. actions:{
    11. jiaOdd(context,value){
    12. console.log('actions中的jiaOdd被调用了')
    13. if(context.state.sum % 2){
    14. context.commit('JIA',value)
    15. }
    16. },
    17. jiaWait(context,value){
    18. console.log('actions中的jiaWait被调用了')
    19. setTimeout(() => {
    20. context.commit('JIA',value)
    21. }, 500);
    22. }},
    23. mutations:{
    24. JIA(state,value){
    25. console.log('mutations中的JIA被调用了')
    26. state.sum +=value
    27. },
    28. JIAN(state,value){
    29. console.log('mutations中的JIAN被调用勒')
    30. state.sum -=value
    31. },},
    32. state:{
    33. sum:0, //当前的和
    34. school:'尚硅谷',
    35. subject:'前端',
    36. },
    37. getters:{
    38. bigSum(state){
    39. return state.sum*10
    40. }
    41. }
    42. }
    43. //人员管理相关配置
    44. const personOptions ={
    45. namespaced:true,
    46. actions:{},
    47. mutations:{
    48. ADD_PERSON(state,value){
    49. console.log('mutations中的ADD_PERSON被调用勒')
    50. state.personList.unshift(value)
    51. }},
    52. state:{
    53. personList:[
    54. {id:'001',name:'张三'}
    55. ]
    56. },
    57. getters:{}
    58. }
    59. //创建并暴露store
    60. export default new Vuex.Store({
    61. modules:{
    62. countAbout:countOptions,
    63. personAbout:personOptions
    64. }
    65. })

  • 相关阅读:
    leetcode25 K个一组反转链表
    作为前端还在使用GIF动画吗?换一种更优雅的方案吧
    新品发布 | Cloudpods 3.9.1 版本上线
    VUE3_Three项目构建(基础模板)
    矩池云快速安装torch-sparse、torch-geometric等包
    CodeForces Round #817 (div.4) A~F
    Java项目:SSH企业人力资源管理系统
    企业为什么要做数字化转型,应该如何进行转型?
    三国志14信息查询小程序(历史武将信息一览)制作更新过程02-基本架构
    springboot整合vue2实现简单的新增删除,整合ECharts实现图表渲染
  • 原文地址:https://blog.csdn.net/2301_76386566/article/details/133773490