简单理解vuex的五个核心

112 阅读1分钟

1. state

          存储相关的数据,像组件中的data属性一样

代码如下(示例):

       const store=new Vuex.Store({

            state:{                  //state存放数据

                num:0,

                msg:"hello",

                lists:[

                    {

                        id:1,

                        name:"张三",

                        sex:'男',

                        age:10

                    }

                ]

            }

            }

        })

使用state数据    $store.state.属性名

2. getters

        通过state里的数据,得到一个新的数据集合,一般用来筛选state里的数据

代码如下(示例):

        getters:{

                自定义方法名(state){          这里的state表示仓库中的state

                        return      代码

                }

        }

使用得到的新的数据

        <元素标签名>$store.getters.自定义方法名</元素标签名> 

         例子:筛选出性别为“男”的信息 

    <div id="app">
        <p>{{$store.getters.filterSex}}</p>
    </div>
    <script src="./css and js/vue.min.js"></script>
    <script src="./css and js/vuex.min.js"></script>
    <script>
        const store=new Vuex.Store({
            state:{                  //state存放数据
                num:0,
                lists:[
                    {
                        id:1,
                        name:"张三",
                        sex:'女',
                        age:10
                    },
                    {
                        id:2,
                        name:"张三",
                        sex:'男',
                        age:15
                    },
                    {
                        id:3,
                        name:"张三",
                        sex:'男',
                        age:20,
                    },
                ]
            },
            getters:{            //获取state里的数据从而得到一个新的数据集合,像筛选state里的数据
                filterSex(state){
                    return state.lists.filter(lists =>lists.sex=="男")
                }
            }
        })
        new Vue({
            el:"#app",
            store            //将store挂载到vue中
        })
    </script>

3. mutations

        唯一能修改state中的数据的入口。

格式:

        mutations:{

                自定义方法名(state){

                        //代码块

                }

        }

想要调用store里边的mutations中的方法  需要使用

        this.$store.commit ("自定义方法名")

 例子:点击按钮实现数据的改变

    <div id="app">
        {{$store.state.num}}
        <button @click="change">修改数据</button>
    </div>
    <script src="vue.min.js"></script>      //引入vue.min.js
    <script src="vuex.min.js"></script>     //引入vuex.min.js
    <script>
        const store=new Vuex.Store({
            state: {
                num: 1
            },
            mutations: {
                changeNum(state) {
                    state.num=120
                }
            }
        })
        new Vue({
            el: "#app",
            store,
            methods:{
                change(){
                    this.$store.commit('changeNum')
                }
            }
        })
    </script>

4. actions

         一般用于数据的请求。

        第一步:使用actions请求到数据

        第二步:将请求到的数据放在state中

        第三步:调用mutations对state进行修改

格式

    actions: {

        自定义方法名() {

            异步请求

            一般情况下请求后台数据

        }

    }

我们需要使用$store.dispatch() 触发actions里边的方法

    $store.dispatch('自定义方法名')

5. modules

         对state、getters、mutations、actions进行分割,分割成模块使用

        modules: {

            自定义模块名: {

                state: {},

                getters: {},

                mutations: {},

                actions: {},

                modules: {}

            }

        }

        获取modules里模块的state中的数据

                $store.state.模块名.属性名

        获取modules里模块的getters中的数据

                需要给这个模块添加命名空间

                namespaced:true

               然后通过  this.$store.getters.模块名/方法名   获取数据

总结

        state:存储相关数据,当data使用

        getters:从state获取数据,得到新的数据集合

        mutations:唯一修改state数据的方式

        actions:进行异步操作,请求数据

        modules:进行模块分割