白话vuex的使用!

1、给你讲个故事

记得学react的状态管理redux的时候那个痛苦啊,恨不得放弃react,之前老有人说vue简单vuex全局状态管理难,在我看来,官网说的太官网了,以至于有的人用的不对,有的人不会用,还有的干脆放弃它,“我要自己造轮子”!

2、假如你从造轮子的角度去理解vuex

(1)、如果是我造轮子,嗯,我可能需要一个仓库存这些个状态。百度翻译一下,状态 = state,那就是state了吧!大概样子长这样吧!

state:{
  firstName:"李"
  lastName:"四"
}

(2)、state这个仓库一般都是元数据,单元很小(方便控制嘛!万一他爹想改个名字呢?又或者万一后来发现他爹不姓...额,跑题了!),我总觉得这样差点意思啊,我整个系统N处用的都是两个的组合,那岂不是到处都要写这个相加?

let name = state.firstName + state.lastName

当然不能,我要写个获取,百度翻译一下 获取 = getter,那 "获取'S" = getters,嗯,天才了!那基本长这个样子吧!

state:{
  firstName:"李"
  lastName:"四"
}
getters:{
  name:(state)=> state.firstName + state.lastName,  // 姓名 李四
  nickname: (state)=> "小" + state.firstName, // 昵称,小李
  nickname2: (state)=> state.firstName + state.firstName, // 昵称2,四四
}

这我就只管用 getters.name了,真香!

(3)、好! 伟大的工程基本竣工了!但是.... 我发现我每次获取完了接口,好多参数都要一个个改,基本造成了一下严重问题!

import lunzi from "./lunzi"
...
lunzi.state.firstName = "李"
lunzi.state.lastName = "四"
lunzi.state.sex = "男"
...

这简直噩梦,小清新变成了臃肿大妈了!我们是不是可以把这段提出来呢?看来需要一个数据加工厂来改变state! 百度翻译一下,加工 = "mutations",改造后结构大概是这样的!

// 存储
state:{
  firstName:"李"
  lastName:"四"
}
// 组合
getters:{
  name:(state)=> state.firstName + state.lastName
}
// 加工处理
mutations:{
  update(state,value){
    state.firstName = value.firstName
    state.lastName = value.lastName
  }
}

// 某天发现他爹不是他爹,他姓张的时候!
// abdc.vue里的代码
import lunzi from "./lunzi";
...
lunzi.commit("update",{ firstName:"张", lastName: "四"})

好了,这就完成了一次换姓的过程!看起来美美的,也不难理解了!

(4)、不过我们还会遇到一些问题,我们的轮子太单纯了,出去容易受欺负,它应该是个成熟的轮子,能够处理一些复杂的事情,比如自己发现猫腻,让它有自己思考的能力,去找他真实的爹!
对于我们项目来说就是主动收到启发嘛! 这个思考和启发起源于一个动作,是某个动作让他怀疑了人生,让他开始探索的,所以为了我们的轮子更成熟,我们需要给他一个动作暗示,让他思考!
百度翻译,动作 = action!那么我继续改造!

// 存储
state:{
  firstName:"李"
  lastName:"四"
}
// 组合
getters:{
  name:(state)=> state.firstName + state.lastName
}
// 加工处理
mutations:{
  update(state,value){
    state.firstName = value.firstName
    state.lastName = value.lastName
  }
}
// 启发
action:{
    触发怀疑人生({commit}){
          API.探索().then(res=>{
              // res 就是 { firstName:"张", lastName: "四"}
              commit("update",res)
          })
    }
}

// 某天发现猫腻时候!
import lunzi from "./lunzi";
...
lunzi.dispatch("触发怀疑人生"})

这是,我们只需要在系统开发的还是,随时 怀疑人生就ok了!

总结:经过这么一套白话,我们也经历了vuex的创作思路,就是对数据的管理和处理的封装。

3、假如你还是不懂!记住这个口诀!

action = 进货的、从API啊,从本地缓存,从cookie,从window对象等等... 各地区进货!
mutations = 加工工厂,我只收原材料,处理加工
state = 仓库
getters = 干打包的

你可能感兴趣的:(白话vuex的使用!)