state , getters 的用法

2019-03-12  本文已影响0人  皇甫圣坤
  <!-- 
    getters中都是函数
      可以从state或者getter中衍生新的数据

      因为getter是对state衍生出来的数据,所以每个getter函数都有参数state

      getter是可以返回一个函数的,这样我们就可以在组件中传参数来筛选获取到我们想要的数据
    {
      getters:{
        //正常写的getter
        getter名字(state,getters) {
          return state.xxx数据
        },
        //使用时 $store.getters.getter名字
        //返回函数时
        getter名字 (state,getters) {
          return (参数) => {
            return state.xxx根据参数筛选数据
          }
        }
        //使用时 $store.getters.getter名字(实参)
      }
    }
   -->
     <div id="app">
     <!-- {{$store.getters.boys}} -->
     <ul>
       <li v-for="boy in $store.getters.boys">
         <span>{{boy.name}}</span>
         <span>{{boy.sex}}</span>
       </li>
     </ul>
     <ul>
       <li v-for="stu in students(15)">
         <p><span>姓名:{{stu.name}}</span></p>
         <p><span>年龄:{{stu.age}}</span></p>
       </li>
       <p><span>男孩数:{{$store.getters.boysLength}}</span></p>
     </ul>
   </div>
  <script src="./js/vue.js"></script>
  <script src="./js/vuex.js"></script>
  <script>
    const store = new Vuex.Store({
      state: {
        stus: [
          {name: '张静',age: 16,sex: '女'},
          {name: '李四',age: 28,sex: '男'},
          {name: '旺旺',age: 10,sex: '女'},
          {name: '小花',age: 18,sex: '女'},
          {name: '高尚',age: 15,sex: '男'},
          {name: '潘潘',age: 16,sex: '女'},
          {name: '张三',age: 17,sex: '男'},
        ]
      },
      getters: { //getter都是函数
        boys (state) {
          //return 的值就是未来获取到的值
          return state.stus.filter(stu => stu.sex === '男')
        },
        ageOld (state) {
          // return state.stus.filter(stu => stu.age >=18)
          //getter 中可以返回一个函数
          return (age) => {
            return state.stus.filter(stu => stu.age >=age)
          }
        },
        boysLength (state,getters) {
          return getters.boys.length
        }
      }
    })

    const app = new Vue({
      el: '#app',
      store,
      computed: {
        students () {
          return this.$store.getters.ageOld
        }
      }
    })
  </script>
上一篇下一篇

猜你喜欢

热点阅读