• 基于vue前端状态管理模式


    本文仅介绍及区分localstorage、vuex以及vue的全局变量、组件。

    一、localstorage简介

    localStorage、sessionStorage以及cookie都是在浏览器用来存储数据的,只是作用于浏览器,不会存在与服务器交互的情况。sessionStorage只在当前的域名中有效,重新打开一个新窗口就会重新创建一个sessionStorage对象。而localstorage会一直存在,直到我们手动清除浏览器数据,否则会一直存在浏览器中。

    二、vuex简介

    vuex是专门为vue.js开发的状态管理模式。采用集中式存储管理应用中所有组件的状态,并以响应的规则保证状态以一种可预测的方式发生变化。vuex有5个核心概念,分别为state、getter、mutation、action、module。这五个核心概念都围绕着一个核心,就是store(仓库),将组件的共享状态抽取出来,存到仓库中,以一个单例模式管理,任何一个组件都可以获取到管理的数据或者触发管理的状态。

    vuex中一个store(仓库)包括了行为(actions)、突变(mutations)、状态(state),完成的vuex的一个流程为:一个组件(components)中的一个方法调用(dispatch)了actions,随后actions提交(commit)了对应的mutations,随后mutations操作了state中的状态数据,当状态改变的时候,组件就会重新渲染,实现了即时的局部更新。

    我们在遇到多个组件共享状态,多个视图依赖于同一个状态,不同视图的行为需要改变同一个状态的时候,我们就可以用vuex来解决这些问题。

    三、vuex和localstorage区别

    1、从名称上看,vuex称为状态管理,重点为管理,而localstorage重点为存储。是完全不同的两个概念,vuex存的是状态,表示与view对应的数据,存在内存中,而localstorage是浏览器提供的接口存文件等,存在磁盘中或者本地。这也是他们之间最大的区别。

    2、vuex和localstorage存活周期也不同,localstorage只要用户不手动清空,那么会一直在本地永久的保存下去,而vuex,关闭页面的时候。

    3、vuex的核心是store,其的存储状态是响应式的,当vue组件从store中读取状态的时候,如果store中的状态发生改变,那么相应的组件也会得到相应的局部高效更新,这点是localstorage做不到的。

    4、vuex的store中的状态我们是不可以直接改变的,唯一改变他的方法就是提交(commit)mutation,这样我们可以跟踪查看到每一次的数据状态的变化,而localstorage不能检测到变化只能帮我们存储。

    四、vuex和vue全局变量、组件的区别

    1、简介vue全局变量

    全局变量指定义一个变量,在vue所有实例中都可以使用。举一个最简单的例子,在我们vue项目中需要使用axios请求的时候,我们需要定义一个baseURL,如果我们在每个页面请求的时候都写一次地址,万一服务器的地址改变了,那么就需要每一个页面都要去改,会非常麻烦而且容易出错,所以定义一个总的baseURL,在需要改变的时候,只需改变一次就好了,而且也不会出错。

    2、简介vue全局组件

    组件是vue.js最强大的功能之一,它可以扩展html元素,封装可重用的代码,是一个可以自定义的元素,注册了一个全局组件后,在所有的vue实例中都可以使用。例如我们需要做一个公司的网页,那么不管我们点进哪个链接,页面的上方都会显示公司的名称、logo等,页面最下方都会显示公司地址、联系方式等,那么我们可以定义一个layout的全局组件,这样我们就不用每一个页面都要去写一次了,不仅方便了很多也减少了很多代码。

    3、vuex和全局变量、组件的区别

    全局变量只能在定义以后,在所有引用它的实例中,都显示为这个变量的值,无法实时更新,只有开发者改写代码的时候才能改变,而vuex的状态管理可以利用某个方法就改变其中管理的数据,以达到实时更新。

    全局组件可以传参数,但是vue的文档中也有介绍说到:传参的方法在兄弟组件间的传递是无能为力的,只能通过父级组件直接引用或者通过事件来变更和同步状态,这样是非常容易出错的,所以我们可以利用vuex来解决组件之间的通信问题。

    综上,在基于vue开发应用的时候,应该谨慎而正确的选择,在哪种情况下应该使用哪种状态管理。
    ————————————————

  • 相关阅读:
    110、抽象基类为什么不能创建对象?
    109、什么情况会自动生成默认构造函数?
    108、如果想将某个类用作基类,为什么该类必须定义而非声明?
    107、类如何实现只能静态分配和只能动态分配
    106、C++中的指针参数传递和引用参数传递有什么区别?底层原理你知道吗?
    hdoj--2036--改革春风吹满地(数学几何)
    nyoj--46--最少乘法次数(数学+技巧)
    vijos--P1211--生日日数(纯模拟)
    nyoj--42--一笔画问题(并查集)
    nyoj--49--开心的小明(背包)
  • 原文地址:https://www.cnblogs.com/dillonmei/p/12578664.html
Copyright © 2020-2023  润新知