vuex-4-getters

简介: 这次还梳理不完,明天再补上吧后续主要就是 优化 拆分了

1.前言


这次还梳理不完,明天再补上吧

后续主要就是 优化 拆分了


2. getters概念


有时候我们需要从 store 中的 state 中派生出一些状态,例如对列表进行过滤并计数


computed: {
  doneTodosCount () {
    return this.$store.state.todos.filter(todo => todo.done).length
  }
}

如果有多个组件需要用到此属性,我们要么复制这个函数,或者抽取到一个共享函数然后在多处导入它——无论哪种方式都不是很理想

解决方案


Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算



3. demo 数据


store.js

对用户数据做个初步处理 筛选出 vip 用户


state: {
    todos: [
      { text: "吴京", vip: true },
      { text: "沈腾", vip: false },
      { text: "关晓彤", vip: true },
      { text: "毛不易", vip: false }
    ]
  },
 getters: {
    vipTodos(state) {
//  *********************************  简洁写法
      return state.todos.filter(v => v.vip)
// ***************************过滤写法
      // return state.todos.filter(v => {
      //   return v.vip
      // })
    }
  },

getters类似组件中的computed 依赖于state创建的共享属性

该方法对state数据处理


4.  常规使用



computed:{
...mapState(["todos"]),
    getT(){
      return this.$store.getters.test
    },
    getVipTodos(){
      return this.$store.getters.vipTodos
    }
  }


模板


<h1>所有用户</h1>
   <ul>
      <li v-for="(v, i) in todos" :key="i">
        <span>{{ v.text }}</span>
        <span v-if="v.vip">VIP用户</span>
      </li>
    </ul>
    <hr/>
    <h1>会员用户</h1>
    <ul>
      <li v-for="(v, i) in getVipTodos" :key="i">
        <span>{{ v.text }}</span>
      </li>
    </ul>



5. 辅助函数


mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性:


computed:{
    ...mapState(["todos"]),
    ...mapGetters(["vipTodos"]),
  }

用法

和之前的 mutionsactions 一样


<h1>会员用户</h1>
    <ul>
      <li v-for="(v, i) in vipTodos" :key="i">
        <span>{{ v.text }}</span>
      </li>
    </ul>



6. 辅助函数 别名


使用对象形式


...mapGetters({
  // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
  doneCount: 'doneTodosCount'
})




相关文章
|
16天前
|
存储 JavaScript 前端开发
vuex使用
vuex使用
|
22天前
|
存储 JavaScript API
vuex的使用
vuex的使用
10 0
|
3月前
|
JavaScript
vuex中的getters
vuex中的getters
17 0
|
3月前
|
存储 JavaScript
什么是vuex
什么是vuex
18 0
|
9月前
|
存储 资源调度 JavaScript
Vuex详解,详细讲解一下Vuex
Vuex详解,详细讲解一下Vuex
165 0
|
4月前
|
存储 JavaScript 安全
vuex总结
vuex总结
35 0
|
11月前
|
JavaScript
侃侃VUEX实现
「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」
|
存储 JavaScript
关于Vuex的简单实际应用
关于Vuex的简单实际应用
关于Vuex的简单实际应用
|
存储 JavaScript API
vuex初步认识
Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。当我们在之后介绍到 Modules 时,你就知道 context 对象为什么不是 store 实例本身了。
69 0