vue状态管理器

1. 什么是vuex? 

vuex 是一个专门为vue.js应用程序开发的状态管理模式。

2. 为什么使用vuex?

当我们遇到多个组件共享状态时,多层组件的传值非常繁琐,不利于维护,因此我们把组件的共享状态抽取出来,统一管理,在这种模式下,不管在哪个组件都可以获取状态或触发行为。

3. vuex五种基本对象

  • state:存储状态(变量)
  • getters:对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $sotre.getters.fun()
  • mutations:修改状态,并且是同步的。在组件中使用$store.commit('',params)。这个和我们组件中的自定义事件类似。提交mutions是更改Vuex中的状态的唯一方法。mutations必须是同步的,如果要异步需要使用actions。
  • actions:异步操作。在组件中使用是$store.dispath(''),是专门操作异步请求的数据和业务逻辑的地方,它不能直接变更state中的状态,而是通过commit来调用mutations里的方法来改变state里的数据。
  • modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。

4. vuex的应用

//新建store.js文件 

//初始化数据
state: {bannerlist:[]}
//请求数据
action:{
    getbannerlist(context){
        axios.get('/banner').then(res=>{
            context.commit({
                type:changebannerlist
                data:res.data
        })
    })
}
// 改变状态
mutations: {
    changeBannerlist (state, data) {
      state.bannerlist = data.data
    }
}

//在组件中使用
computed: {
    ...mapState({
     bannerlist: (state) => state.home.bannerlist
   })
 }

created () {
   this.$store.dispatch('getBannerlist')
 }

5.组件中使用 vuex 的值和修改值的地方?

//直接获取 修改
//state
this.$ store.state.count
//getter
this.$ store.getters.count
//调用 action 修改 state 值,不带参数
this.$ store.dispatch('increment');
//调用 action 修改 state 值,带参数
this.$ store.dispatch('increment',{value :123});

6.pc端页面刷新时实现vuex缓存

办法一:将vuex中的数据直接保存到浏览器缓存中(sessionStorage、localStorage、cookie)
办法二:在页面刷新的时候再次请求远程数据,使之动态更新vuex数据
办法三:在父页面向后台请求远程数据,并且在页面刷新前将vuex的数据先保存至sessionStorage(以防请求数据量过大页面加载时拿不到返回的数据)
分析:
办法一的缺点是不安全,不适用大数据量的存储;
办法二适用于少量的数据,并且不会出现网络延迟;
办法三是要讲的重点,办法二和办法一一起使用。

 

 

posted @ 2019-12-02 09:11  竹薙  阅读(631)  评论(0编辑  收藏  举报