zoukankan      html  css  js  c++  java
  • vue 3.x (四)

    vuex复习

    一、vue-devtools

    vue-devtools

    国内chrome插件下载地址:https://crxdl.com/ (不用翻墙)

    二、vuex

    1. vuex是什么:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态(面试中:vuex是vue中集中管理数据工具)

    2. vue组件通讯:父子通讯(父子,子父),兄弟通讯,隔代组件通讯(A->B->C->D)

    3. vuex可以实现兄弟通讯,隔代通讯,父子通讯

    4. vuex通常存放哪些数据:组件之间经常共享的数据

    5. vuex通常用于什么样项目:根据项目复杂程度,组件比较多,数据传递比较复杂,数据难于管理时,就会想到vuex,例如:电商,后台管理的项目

    6. vuex的核心:

      • state:数据仓库

        • 组件中读取state数据
        第一种方式:this.$store.state.count
        第二种方式:通过mapSate读取(也称做vuex辅助函数)
          步骤:
          1.import { mapState } from 'vuex'
          2.通过computed中注入mateSate
            computed: {
            	...mapState(['count', 'token', 'index'])
            }
        
      • actions:通常用于异步方法操作,但不会在这步改变state值

        • 组件中调用actions方法
        第一种方法:this.$store.dispath('actions的方法名',要传递的值)
        第二种方法:通过mapActions读取(也称做vuex辅助函数)
         步骤:
          1.import { mapActions } from 'vuex'
          2.通过methods中注入mateActions
            methods: {
            	...mapActions(['count', 'token', 'index'])
            }
        
      • mutations

       在actions中方法中通过commit('mutaions方法名',要传递的值);
      

      注意:通常在muations中定义的方法名,并且mutions中代码都是同步操作

      组件改变vuex中数据状态的流程:

             dispath           commit             逻辑操作
      vue组件---------->actions--------->mutations------->改变state---->最终同步到vue组件视图上
      

      vuex中数据持久化的问题??

      实现原理:利用本地存储

      localStorage,sessionStorage,cookie
      localStorage.setItem('cartData',JSON.stringify(obj))  //存储数据
      let cartData=localStorage.getItem('cartData')  //读取本地存储数据
      
      cartData=JSON.parse(cartData);
      
      localStorage.removeItem('count') //清除某一属性指定的值
      localStorage.clear() //清除全部
      
      

      这里除了通过本地存储之外,也可以通过一个vuex数据持久化插件来解决

      例如:vuex-persistedstate

      使用方法:

      第一步:安装:
      	npm install --save vuex-persistedstate
      
      第二步:在vuex中的index.js引入
      import createPersistedState from "vuex-persistedstate";
      
      第三步:在vuex实例上通过plugins注入
      export default new Vuex.Store({
        ...
        plugins: [createPersistedState()]
      
      })
      
      • getters: getters相当于是vuex中的state的计算属性
      第一种方法:this.$store.getters.getters的计算属性名
      第二种方法:通过mapGetters读取(也称做vuex辅助函数)
       步骤:
        1.import { mapGetters } from 'vuex'
        2.通过computed中注入mateActions
          computed: {
          	...mapGetters(['count', 'token', 'index'])
          }
      
      • module:为了解决应用的所有状态会集中到一个比较大的对象的臃肿,管理复杂的问题
      读取module中的数据状态
      
      在compute中通过this.$store.state.module的模块属性.模块内部的属性名
      例如:
      export default new Vuex.Store({
        ...
        modules: {
          user: user,
          orderlist: orderlist
        }
      
      })
      
      注:无论用module切割多少个store,最终都会将state,actions,modules合并到一个store树上面
      
      • 插件:plugins 为了扩展vuex的功能,例如:vuex的数据持久化插件
    7. vuex的工程目录

      - src
        └── store
            ├── index.js          # 我们组装模块并导出 store 的地方
            ├── actions.js        # 根级别的 action
            ├── mutations.js      # 根级别的 mutation
            └── modules
                ├── cart.js       # 购物车模块
                └── products.js   # 产品模块
      
    8. mutations-type 常量化

      将mutations的公共常量单独存放到一个文件中,便于mutations方法名的管理
      例如:
      export const INCREMENT = 'INCREMENT'
      export const DECREMENT = 'DECREMENT'
      
      然后再mutation.js中引入,如下:
      import { INCREMENT, DECREMENT } from './mutation-types'
      
    9. js文件的自动导入【不是必须会,但会了会让生活更美好--】

      webpack中有一个require.context可实现文件的自动导入

    //读取./modules/目录下的所有js文件
    const moduleFiles = require.context('./modules/', true, /.js$/);
    
    //console.log('moduleFiles:',moduleFiles.keys())
    
    //通过recude遍历获取所有store,组成{ 文件名:{actions,getters,mutations}: }
    const modules = moduleFiles.keys().reduce((module, modulePath) => {
      
      //获取store名
      const moduleName = modulePath.replace(/./(.+).w+/, '$1')
      //取出当前store所有内容
      const value = moduleFiles(modulePath).default
      
      module[moduleName] = value;
    
      return module;
      
    }, {})
    
    

    数组reduce用法mdn参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

    正则你还不明白吗,看文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp

    如何取出文件名的主名部分: ./orderlist.js 我想取出orderlist如何取出

    核心思路:通过正则表达取出

  • 相关阅读:
    为什么 PCB 生产时推荐出 Gerber 给工厂?
    Fedora Redhat Centos 有什么区别和关系?
    【KiCad】 如何给元件给元件的管脚加上划线?
    MCU ADC 进入 PD 模式后出现错误的值?
    FastAdmin 生产环境升级注意
    EMC EMI 自行评估记录
    如何让你的 KiCad 在缩放时不眩晕?
    KiCad 5.1.0 正式版终于发布
    一次单片机 SFR 页引发的“事故”
    java基础之集合
  • 原文地址:https://www.cnblogs.com/akby/p/12932619.html
Copyright © 2011-2022 走看看