vuex的使用

朴灿烈づ我的快乐病毒、 2022-05-24 04:59 302阅读 0赞

Vuex的应用场景有什么?什么时候适合使用Vuex,什么时候不适合使用Vuex?

  1. 涉及到非父子关系的组件,例如兄弟关系,祖孙关系,甚至更远的关系;
  2. 他们之间如果有数据交互,那么应该使用Vuex来实现;
  3. 如果页面复杂度比较低的话,可以也。考虑使用 global-event-bus 来实现;
  4. 如果只是父子关系的组件数据交互,那么应该考虑使用的道具进行单向传递;
  5. 如果涉及到子组件向父组件的数据传递,应该那么考虑使用 $emit 状语从句: $on;

在以下场景里,我们应该使用Vuex:

如图1所示,组件会被销毁

我们可以假设这样一个场景:

  1. 假如有这样一个组件,他是弹窗,有一些复选框和输入框,用户会选择和填写信息;
  2. 然后这个弹窗会被关闭和打开,由于业务需要,这个弹窗输入的内容,希望关闭后可以保留,在重新打开后,内容依然存在。

解决办法:

  1. 我们可以考虑将值存在父组件中,也就是说,实际修改的是父组件的值;
  2. 存在比如 sessionStoragecookies之类的里面,在 created 时从中读取,destroyed的时候写入其中;
  3. 存可以到 global-event-bus 里面;

但事实上,最好的还是存在Vuex里:

  1. 直接可以通过 $store.state 来调用,通过 commit() 来修改值;
  2. 也可以在 created 的时候,读取存在状态里面的值,在 destroyed 的时候,写回状态;

这样处理的优点是解耦,不跟其他组件打交道。

2,组件基于数据而创建

我们可以假设这样一个场景:

  1. 用户登录后,读取权限配置表,这显然是一个异步操作;
  2. 这个配置表可能会影响很多页面比如被影响的组件的加载条件,例如是。 v-if="$store.state.userInfo.superVIP;

那么:

  1. 因为读取权限配置表这个异步操作,可能影响多个组件,而这些组件之间的关系,显然是不可预料的(即不一定是在同一个父组件下面);
  2. 那么这个异步操作,写在某一个组件里就不太合适(因为其他组件读取这个组件很不方便,即使他是根组件);

解决办法:

  1. 一个妥协的解决办法,写的英文在 global-event-bus 里面来实现;
  2. 但是显然,更好的解决办法是写在vuex里面更专业一些;

3,多对多事件 - 多处触发,影响多处

我们可以假设这样一个场景:

  1. 假如有一个事件,比如:切换页面显示风格,他将改变某一个变量的值;
  2. 该当变量为 true 时,那么页面风格为白天(影响主要 v-bind:style 的值);
  3. 该当变量为 false 时,那么页面风格为晚上(同上);
  4. 在多个地方可以切换这个页面风格开关;
  5. 毫无疑问,变量这个影响将多个地方的 v-bind:style 的值;
  6. 就是这 多对多 场景;

那么:

  1. 无论这个变量放在哪个组件里,其他组件调用他都是很麻烦的事情;
  2. 即使存于根组件,通过然后 this.$root.xx 来电子杂志这个变量,也是很麻烦的,而且很丑陋;

解决办法:

  1. 如果不使用Vuex,那么我们可能会去考虑使用 global-event-bus 来存储这个变量,并使用它;
  2. 这不是不可以,但不优雅,而且管理麻烦;
  3. 而使用Vuex,那么这就是一件很方便的事情了;
  4. 可以我们通过 $store.state.xxx 来电子杂志这个变量的值;
  5. 通过 $store.getters.yyy 来电子杂志某些基于这个值的,表示通用样式(例如黑底白字)的对象;
  6. 通过 $store.commit() 来提交修改(比如在某些情况下可以禁止修改);
  7. 可以甚至通过 $store.dispatch() 来电子杂志其他风格的样式,并通过 $store.state 状语从句: $store.getters 来报道查看新风格的样式;

4,总结

总而言之,假如你需要 数据 和 组件 分离,分别处理,那么使用Vuex是非常合适的。

相反,如果不需要分离处理,那么不使用Vuex也没关系。

比如某个数据只跟某个组件打交道,是强耦合的。那么这个数据就应该存放在该组件的数据属性中。

发表评论

表情:
评论列表 (有 0 条评论,302人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vuex使用

    9.1、理解vuex 1. 概念:专门在Vue中实现集中式状态(数据)管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的

    相关 Vuex 使用

    Vuex > Vuex是一个针对Vue.js开发的状态管理模式。说简单点儿就是一个工具,可以管理(修改或设置)所有组件用到的数据,而不需要借助之前的event bus或者

    相关 Vuex使用

    前言 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式,它采用集中式存储管理应用的所有组件的状态,本文示例是基于vue-cli4创建的vue2项目。 简

    相关 vuex使用

    VUE + vuex的使用总结如下(查阅资料): 写在前面 本文旨在通过一个简单的例子,练习vuex的几个常用方法,使初学者以最快的速度跑起来一个vue + vue

    相关 Vuex使用

    (。^。) 来扯一扯Vuex呗~ Vuex:是一个专为vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方