当前位置: 首页 > Web前端 > vue.js

状态管理vuex

时间:2023-03-31 18:11:50 vue.js

Vuex使用Vuex是专门为Vue.js应用开发的状态管理模式。它使用集中存储来管理应用程序所有组件的状态,并使用相应的规则来确保状态以可预测的方式变化。安装请参考网址https://vuex.vuejs.org/zh/ins...这里不做过多介绍。概念(1)state:一棵单一的state树,每个应用程序只会包含一个store实例。(2)getters:一些状态可以从store中的state中导出。getters的返回值会根据其依赖关系缓存起来,只有当其依赖值发生变化时才会重新计算。(3)mutations:改变Vuexstore中的状态的唯一方法是提交一个mutation。*constantdesignstyle[SOME_MUTATION](state){//mutatestate}*必须是同步函数(4)actions:Modulesplit由于使用了单一的状态树,所以应用的所有状态都会集中到一个相对大对象。当应用程序变得非常复杂时,存储对象会变得非常臃肿。为了解决以上问题,Vuex允许我们将store拆分成模块。每个模块都有自己的state、mutation、action、getter,甚至嵌套的子模块——从上到下以相同的方式分段:每个模块文件夹都是一个子存储,这在index.js文件中是必需的单个模块下引入一个分库,同时需要在modules中写一个单个模块,如下:应用程序级别应该集中在单个存储对象中。(2)提交突变是改变状态的唯一方式,这个过程是同步的。(3)异步逻辑要封装在action中。Vuex在项目中的使用1.非父子通信问题2.异步数据快照,缓存后端数据,提升用户体验(单个页面可以减少对后端数据的请求)1.非-父子通信问题下面是一个简单的模块as例如,在这个userinfoModule中的state中设置了一个username,mutations中有一个setUsername方法。下面看看在视图中如何使用:首先,登录时需要保存用户名,所以需要在登录页面通过import解构在页面的方法中引入,userinfo是单个模块的名字在模块中,setUsername是存储在userinfoModule中的方法。然后,当用户登录成功后,需要写this.setUsername(this.username);如下,就可以成功的将此时登录的用户名保存到userinfoModule中,这是一个简单的设置。那么如何在其他页面使用这个用户名呢?下面举个例子来完成一个简单的非父子通信问题:首先,如果在那个页面使用username,需要在页面中引入,在页面的computed中引入解构方法...mapState("userinfo",["username"]),可以通过this.username在页面中使用。以上是一个简单的通信问题2.异步数据快照,缓存后端数据,提升用户体验(可以减少单页请求后端数据)下面简单介绍下如何在Vuex中请求数据,缓存数据,并访问数据。在checkoutModule中,数据请求写在actions中,有一个方法store.rootState.userinfo.username,用于各个模块之间通过store.rootState进行通信,其中rootState是根实例。在actions中设置一个名为getCartList的方法,需要传递一个参数store,通过setCartlist方法使用store.commint()将请求的数据设置回cartlist。此时,cartlist中包含了所需的数据。接下来,我们在其他页面调用这个数据:首先,本着用到哪里就导入的原则,先导入,然后在computed中解构,就可以随意使用这个cartlist了。那么,因为Vuex是有缓存的,如果需要更改数据,需要在另一个页面调用这个axios怎么办?首先,你需要导入import{mapActions}from"vuex";然后在methods中解构,最后在需要调用数据请求的地方,直接让axios重新请求即可。此时得到的数据是最新的。vuechromedevtools可以通过devtools调试持久化vuex进行全局状态管理,但是刷新后数据会消失,这是我们不希望看到的。可以结合本地存储实现数据状态持久化,也可以通过插件vuex-persistedstate实现。插件的原理其实就是结合存储方式,只是统一配置不需要每次都手动写存储方式。先安装cnpmivuex-persistedstate--save把store下index.js中的所有状态持久化,或者指定需要持久化的状态。什么情况下应该使用Vuex?Vuex可以帮助我们管理共享状态,并且附带了更多的概念和框架。这需要在短期利益和长期利益之间进行权衡。如果您不打算开发大型单页应用程序,使用Vuex可能会很乏味且多余。的确,如果你的应用足够简单,你最好不要使用Vuex。您只需要一个简单的商店模式。但是,如果你需要构建一个中大型的单页应用,你很可能会考虑如何在组件外部更好地管理状态,而Vuex将成为一个自然而然的选择。引用Redux的作者DanAbramov的话:Flux架构就像眼镜:你会知道什么时候需要它。以上是我个人的总结。欢迎大家指正和讨论。感谢Vue作者和团队!