keep-alive、异步组件、ref、vuex、单例模式、vuex模块组成、getters、mutations、Action、module、plugins(插

115 阅读2分钟

keep-alive

将动态组件包裹起来并且记录缓存    

异步组件

vue2中使用settime来实现异步,vue3中使用promise实现异步

ref

vue3新增ref属性,代替html的id,获取使用this.$refs.名字获取

vuex

Vuex采用和Redux类似的单向数据流的方式来管理数据。用户界面负责触发动作(Action)进而改变对应状态(State) ,从而反映到视图(View) 上

Vuex是Vue.js应用程序的状态管理模式+库

它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化

Vuex把组件的共享状态抽取出来,以-个全局单例模式管理.在这种模式下,我们的组件树构成了--个巨大的“视图”,不管在树的哪个位置,任何组件都能获取状态或者触发行为!

通过定义和隔离状态管理中的各种概念并强制遵守-定的规则,我们的代码将会变得更结构化且易维护.

vuex.jpg

单例模式

单独的实例对象,不可以被继承

vuex模块组成

store:仓库
state:源数据
mutation>Mutations:将数据存入数据库的ApI,改变state的唯一方法
getter>getters:从数据库里提取数据的API,是一个纯函数,不会对源数据造成影响

vues的状态存储是响应式的

不能直接改变store的状态。改变store中的状态的唯一途径是显示地提交(commit)mutation.

state负责存储整个应用的状态,使用this.$store.state直接获取状态

每个应用将紧紧包含一个store实例,单一状态树让我们能够直接的定位任意特定的状态片段

由于vuex的状态存储是响应式的,从store实例中读取状态最简单的方法就是在计算属性中返回某个状态

状态对赋值给内部对象,也就是把index.js中的值,赋值给我们摸班里data中的值。有三种赋值方式

  • 通过computed计算属性直接赋值 computed:{count(){return this.$store.state.count;}}
  • 通过mapState的对象来赋值 import{mpaState}from 'vuex';computed:mapState({count:state=>state.count})理解为传入state对象,使用ES6的箭头函数来给count赋值,修改state.count属性
  • 通过mspState的数组来赋值computed:mapState(["count"])
  • 可以在组件中使用this.$store.commit('xxx')提交mutation,或者使用mapMutation辅助函数组件将组件中的methods映射为store.commit调用

getters

getters是一个纯函数,接受参数state,返回值会根据他的依赖被缓存起来,且只有当他的依赖值发生了改变才会被重新计算

mutations

Mutations的中文意思是变化,利用他可以更改状态(是操作state的唯一方法),vuex中的mutation非常类似于事件:每个mutation都有一个字符串事件类型(type)和一个回调函数(handler)。这个回调函数就是我们实际进行状态更改的地方,并且他会接受state作为第一个参数

MUtation需遵守Vue的响应规则 -最好提前在你的store中初始化好所需属性

  • 当需要在对象上新属性时,你应该使用Vue.set(obj,'newProp',123)或者以新对象替换老对象

Action

  • Action也可以用于状态改变,不过是通过触发mutation实现的,重要的是可以包含异步操作,其辅助函数时mapActions与mapMutations类似,也是绑定在组件的methods上的,如果选择直接触发的话,使用this.$store.dispatch(actionName)方法
  • action和mutations的区别有以下几点
  1. Action提交的是mutation,而不是直接改变状态
  2. Action可以包含任何异步操作
  3. Action还是通过mutation方法来修改state

module

  • 状态管理器的模块组操作
  • vuex允许我们将store分割到模块(module)。每个模块拥有自己的state、mutation、action、getters、甚至是嵌套组模块——从上至下进行类似分割

plugins(插件)

就是一个钩子函数,在初始化store得时候引入即可,比较常用的是内置logger插件,用于作为调试使用

在插件中不允许直接修改状态——类似于组件,只能通过提交mutation来触发变化

通过提交mutation,插件可以用来同步数据源到store