vuex基础

2. vuex

  1. 什么是状态?

    • 用一条数据去管理一个视图或是视图中的一部分,那么我们就将这个数据称之为状态
  2. 什么是状态管理?

    • 用一条数据去管理一个视图或是视图中的一部分,那么我们就将这个数据称之为状态,这种管理的形式我们称之为 状态管理
  3. vuex是做什么的?(概念)

    • vuex是一个集中式的存储仓库【状态】,类似于 本地存储、数据库,vuex是vue的状态管理工具,它的功能主要是实现多组件间的状态【数据】共享
  4. vuex的组成部分

    • state 状态
    • action 动作(业务交互)
    • mutation 修改state
    • getter 获取数据的
    • store state的存储者
  5. 应用场景

    1. 相对比较大型的应用(状态较多)
  6. 判断你的项目是不是应该使用vuex

    1. 当你觉得你的项目不需要vuex的时候,那么就不用
    2. 你觉得需要的时候,就直接使用
  7. 思维流程:
    store.js
    this. s t o r e . c o m m i t ( ′ i n c r e m e n t ′ ) − > m u t a t i o n s t h i s . store.commit('increment') -> mutations this. store.commit(increment)>mutationsthis.store.dispatch(‘jia’) -> actions
    mapActions() ->actions mapGetters()->getters

       学生          代课老师         校长           财务      班主任             学生
    

(view)component - dispatch > action -> mutation -> state <- getter <- component
发送请求 处理 修改状态
业务逻辑 修改state 读取state
异步

  1. vuex的使用方案有哪些?(state修改前,state修改后)

    1. 前标准,后标准 √
    2. 前标准,后非标准 √
    3. 前非标准,后标准 √
    4. 前非标准,后非标准 √
  2. 问题

    1. 数据的获取写的太长了,冗余
    2. 视图和vuex的交互代码太长了,冗余
    • 解决: Vuex提供了4个辅助工具: mapState mapGetters mapActions mapMutaions
      - mapState 我们可能不常用
    • mapGetters([gettersFnName]) 使用 {{ gettersFnName }}
         new Vue({
           //computed: mapGetters(['getCount']), // 这么写我们的当前组件的自定义计算属性就没有地方放了
           computed: {
             ...mapGetters(['getCount])
           }
         })
      
  • mapActions([actionsFnName]) 标准

      new Vue({
        methods: {
          ...mapActions([actionsFnName])
        }
      })
    
  • mapMutations([mutationsFnName]) 非标准

        <button @click = "mutationsFnName()"></button>
    
      new Vue({
        methods: {
          ...mapMutations([mutationsFnName])
        }
      })
    
  • 以上讲的都是用户交互,没有写数据交互

  • vuex 的数据交互

  • 注意:

    • vuex的数据交互写在actions里面
  • actions.js

  const actions = {
      getDataInfo ( { commit } ) {
        fetch('/data.json')
          .then( res => res.json() )
          .then( data => {
            //获取到数据之后进行动作的创建和发送
            let action = {
              type: 'GETDATAINFO',
              payload: data
            }
            commit( action )

          })
          .catch( error => console.log( error ))
      }
  }

  export default actions

vuex 中的 modules

  • store目录中放的是目录
    <!-- 目录结构 -->
      store
        index.js
        home
          state.js
          actions.js
          mutations.js
          getters.js
          type.js
          index.js
        shopcar
            state.js
            actions.js
            mutations.js
            getters.js
            type.js
            index.js
        list
          state.js
          actions.js
          mutations.js
          getters.js
          type.js
          index.js
        user
          state.js
          actions.js
          mutations.js
          getters.js
          type.js
          index.js
    // home  下的 index.js 
        import state from './state'
        import actions from './actions'
        import mutations from './mutations'
        import getters from './getters'
        const homeModule = {
          state,
          actions,
          mutations,
          getters
        }
        export default homeModule
    // store 下的  index.js 
      const store = new Vuex.Store({
        modules: {
          //key: value   // key就是目录名称, value就是目录下的index.js导出的模块
          home: homeModule
        }
      })
      export default store
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值