美文网首页
vuex之getter示例说明

vuex之getter示例说明

作者: Mr无愧于心 | 来源:发表于2018-10-29 16:55 被阅读0次
<div id="app">
    <Todo></Todo>
    <Todo1></Todo1>
    <Todo2></Todo2>
</div>
<script>

    /*const store = new Vuex.Store({
        state: {//用一个对象就包含了全部的应用层级状态。(唯一数据源)
            todos: [
                { id: 1, text: '哈哈哈', done: true },
                { id: 2, text: '嘿嘿嘿', done: false }
            ]
        },
    })
    //由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性
    const Todo = {
        template: `<div>列表一<ul><li v-for="todo in todos">{{todo.text}}</li></ul></div>`,
        computed: {
            todos () {
                return this.$store.state.todos;
                //或者做一些其他处理
            }
        }
    }
    const Todo1 = {
        template: `<div>列表二<ul><li v-for="todo in todos">{{todo.text}}</li></ul></div>`,
        computed: {
            todos () {
                return this.$store.state.todos;
                //或者做一些其他处理
            }
        }
    }
    const Todo2 = {
        template: `<div>列表三<ul><li v-for="todo in todos">{{todo.text}}</li></ul></div>`,
        computed: {
            todos () {
                return this.$store.state.todos;
                //或者做一些其他处理
            }
        }
    }

    const app = new Vue({
        el: '#app',
        // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
        store,
        components: {Todo,Todo1,Todo2},
    })*/

    /*
    *
    * 以上的每个组件中都需要拿取store中的值,每个组件中都需要配置相同的计算属性,或者抽取一个共享函数引用他,都不是理想的方法
    * 所以getter诞生了
    * Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
    *
    * */
    /*const store = new Vuex.Store({
        state: {
            todos: [
                { id: 1, text: '...', done: true },
                { id: 2, text: '...', done: false }
            ]
        },
        getters: {
            todos: state => {
                return state.todos;
            }
        }
    })*/
    const store = new Vuex.Store({
        state: {//用一个对象就包含了全部的应用层级状态。(唯一数据源)
            todos: [
                { id: 1, text: '哈哈哈', done: true },
                { id: 2, text: '嘿嘿嘿', done: false },
                { id: 3, text: '呵呵呵', done: true }
            ]
        },
        getters:{//就是store中的计算属性,避免组建中重复编写的内容;减少冗余代码
            todosList: state => {//通用的方法    在所有的组件中都可以通过计算属性中 this.$store.getters.todosList 获取的值
                return state.todos.filter(todo => todo.done)
                //或者做一些其他数据处理
            }
        }
    })
    //通过属性访问
    console.log(store.getters.todosList)

    //由于 Vuex 的状态存储是响应式的,从 store 实例中读取状态最简单的方法就是在计算属性
    const Todo = {
        template: `<div>{{doneTodosCount}}</div>`,
        computed: {
            doneTodosCount(){
                return this.$store.getters.todosList.length;
            }
        }
    }
    const Todo1 = {
        template: `<div>列表二<ul><li v-for="todo in todosList">{{todo.text}}</li></ul></div>`,
        computed: {
            todosList () {
                return this.$store.getters.todosList
            }
        }
    }
    const Todo2 = {
        template: `<div>列表三<ul><li v-for="todo in todosList">{{todo.text}}</li></ul></div>`,
        computed: {
            todosList () {
                return this.$store.state.todos
            }
        }
    }

    const app = new Vue({
        el: '#app',
        // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件
        store,
        components: {Todo,Todo1,Todo2},
    })


    /*
    *
    * 通过方法访问
    * 通过让 getter 返回一个函数,来实现给 getter 传参。
    * 在你对 store 里的数组进行查询时非常有用。
    *
    * */

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

    //组件中获取值
    /*methods:{
        find(n){
            store.getters.getTodoById(n) // -> { id: 2, text: '...', done: false }
        }
    }
    computed:{
        fil(){
            store.getters.getTodoById(2)
        }
    }*/

    //mapGetters 辅助函数

    console.log(Vuex.mapGetters);

    /*模块化开发用import
    import { mapGetters } from 'vuex'*/

    export default {
        // ...
        computed: {
            // 使用对象展开运算符将 getter 混入 computed 对象中(此处接收一个getter的数组,也可以接收一个对象,下边的例子)
                ...mapGetters([
                    'doneTodosCount',
                    'anotherGetter',
                    // ...
                ])
        }
    }
    //如果你想将一个 getter 属性另取一个名字,使用对象形式:(就是setter的名字和组件中的名字不一样的时候这么用)

    export default {
        // ...
        computed: {
            // 使用对象展开运算符将 getter 混入 computed 对象中(此处接收一个getter的数组,也可以接收一个对象,下边的例子)
                ...mapGetters({
                    // 把 `this.doneCount` 映射为 `this.$store.getters.doneTodosCount`
                    doneCount: 'doneTodosCount',
                    //....

                }),
                //这里还可以写自己的计算属性
        }
    }
</script>

相关文章

  • vuex之getter示例说明

  • vuex之action示例说明

    Action 类似于 mutation,不同在于:

  • vuex之state示例说明

  • vuex之mutation示例说明

    mutation中文意思是改变、变异更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。V...

  • Vuex之Getter

    Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,...

  • Vuex之getter

    Vuex提供给我们一个Getter方法,主要就是为了在数据派生一些状态,简单来说就是想要通过判断进行过滤。 比如有...

  • getter

    getter vuex 的 '计算属性'

  • vuex Getter

    我们需要从store中的state中派生出一些状态,例如对列表进行过滤并计数: 多个组件需要用到此属性,我们要么复...

  • vuex介绍及示例说明

    首先我们要明白vuex是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管...

  • lombok 文档翻译

    @Getter 可选元素: 使用示例: 说明: Lazy:默认为:false,如果设置 lazy 则 该属性必须为...

网友评论

      本文标题:vuex之getter示例说明

      本文链接:https://www.haomeiwen.com/subject/ycibtqtx.html