vuex(核心管理模式二)

一、Vuex-state定义公共数据并在组件中使用(核心管理模式

state的作用

vuex用它来保存公共数据

在组件中,通过this.$store.state.属性名来访问。

在模板中,则可以省略this而直接写成: { {$store.state.属性名}}

vue-devtool调试工具

state的作用是:保存公共数据(多组件中共用的数据)

state是响应式的: 如果修改了数据,相应的在视图上的值也会变化。

二、Vuex-用mutations修改公共数据 

作用

通过调用mutations来修改定义在state中的公共数据。

 

每一项都是一个函数,可以声明两个形参:

  • 第一个参数是必须的,表示当前的state。在使用时不需要传入
  • 第二个参数是可选的,表示载荷,是可选的。在使用时要传入的数据

 语法:

 数据不应该在组件内部直接修改,必须在组件内调用mutations来修改。

mutations的中文含义是:变异。 它是Vuex中用来修改公共数据的唯一入口。

在定义时:它的第一个参数是state,第二个参数是载荷。

在调用时:用 this.$store.commit('mutation名', 载荷) 来调用。

1)Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。

2)数据不可以该在组件内部直接修改。虽然语法上不报错,也有响应式的特点。但是不推荐。特别是在严格模式下会报错。若将vue创建 store 的时候传入 strict: true, 开启严格模式,那么任何修改state的操作,只要不经过 mutation的函数,vue就会报错。

3)常搭配组件created钩子函数中:

  • 发ajax请求(用axios库),获取数据
  • 调用mutations保存数据到vuex
  • 在组件中使用数据

 三、Vuex-用getters的派生状态

作用

在state中的数据的基础上,进一步对数据进行加工得到新数据。(与组件中computed一样)

 语法格式

vuex维护公共数据,主要有两个动作:

  1. 定义数据:
  2. 提供获取/修改数据的方法

四、Vuex-actions-发异步请求 

  1. 组件内部发ajax
  2. ajax回来之后,去调用mutations来保存到vuex中
  3. actions返回的promise

这种方式有一个问题:代码不好重用

actions介绍

  • actions是vuex的一个配置项
  • 作用:发异步请求获取数据,调用mutations来保存数据,将整个ajax操作封装到Vuex的内部
  • 要点:
  • action 内部可以发异步请求操作
  • action是间接修改state的:是通过调用 mutation来修改state

语法:

在组件中通过this.$store.dispatch('actions的名字', 参数)来调用action 

修改上面例子中的发请求图书的代码,将axios的部分写到action中

action一般用来发异步请求,数据回来之后,在去调用mutations来保存数据

将ajax请求放在actions中有两个好处:

  1. 代码得到了进一步封装。将发ajax和保存数据到vuex绑定在一起。
  2. 逻辑更通顺。如果数据需要保存在Vuex的state中,那从接口处获取数据的操作就定义在Vuex的actions中。

 五、Vuex-用modules来拆分复杂业务

       Vue使用单一状态树,那么也意味着很多状态都会交给Vuex来管理.当应用变得非常复杂时,store对象就有可能变得相当臃肿.为了解决这个问题, Vuex允许我们将store分割成模块(Module), 而每个模块拥有自己的state、mutation、action、getters等

目录拆分: 

访问数据和修改数据的调整 

  • 访问模块中的mutations/actions:
  • 如果namespaced为true,则需要额外去补充模块名
  • 如果namespaced为false,则不需要额外补充模块名

 

vuex-用modules之后代码结构优化 

modules模块化开发,减少store的臃肿

猜你喜欢

转载自blog.csdn.net/weixin_66375317/article/details/124774464