• vuex (3)


    Getter

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

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

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

    Vuex 允许我们在store 中定义“getter” (可以认为是store的计算属性)

    Getter 接受 state作为其第一个参数:

    const store = createStore({
    
       state: {
          todos: [
               {id: 1,  text: '...',  done:true},
               {id: 2,  text: '...',  done:false}
          ]
       },
    
       getters: {
          doneTodos: (state) => {
                return state.todos.filter(todo => todo.done)
          }
       }
    })

    Getter 也可以接受其他 getter作为第二个参数:

    ...
    
    getters: {
    
         // ...
         doneTodosCount (state, getters) {
           return getters.doneTodos.length 
        }
    }
    
    ...

    通过属性访问

      Getter 会暴露为 store.getters 对象, 你可以以属性的形式访问这些值:

    store.getters.doneTodos // => [{ id : 1,  text : "...",  done : true}]

    通过方法访问

     你也可以通过让 getter 返回一个函数,来实现给getter传参。

    ...
    getters: {
       // ...
       getTodoById: (state) => (id) => {
    
              return state.todos.find(todo => todo.id === id);
       }
    }
     store.getters.getTodoById(2)

     注意,getter在通过方法访问时,每次都会去进行调用,而不会缓存结果

    mapGetters 辅助函数

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

    import { mapGetters} from 'vuex'
    export default {
        // ...
    
        computed:{
    //使用对象展开运算符将 getter 混入 computed 对象中 ...mapGetters([ 'doneTodosCount', 'anotherGetter' // ... ]) } }

    如果想getter属性另取一个名字,使用对象形式:

     ... mapGetters({
    
          // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
          doneCount: `doneTodosCount`
     })
  • 相关阅读:
    DICOM:DICOM3.0网络通信协议
    Maven使用—拷贝Maven依赖jar包到指定目录
    Spring Boot使用JavaMailSender发送邮件
    SpringBoot配置Email发送功能
    MariaDB 安装与启动 过程记录
    ESXi与Linux主机配置syslog日志上传远程服务器
    Linux--忘记MySQL密码的解决方法和输入mysqld_safe --skip-grant-tables &后无法进入MySQL的解决方法
    centos killall安装
    centos安装lspci工具
    oracle创建job和删除job
  • 原文地址:https://www.cnblogs.com/zhishiyv/p/15881781.html
Copyright © 2020-2023  润新知