当前位置:   article > 正文

Vuex极其详细的介绍与使用(state:统一定义公共数据,mutations:使用他来修改数据,getters:计算属性,actions:发起异步请求,modules:模块拆分)Vuex-map函数_vuex的state和getter归于计算属性

vuex的state和getter归于计算属性

Vuex是什么?

      Vuex是一个专为Vue.js应用程序开发的状态管理模块,采用集中式储存管理应用的所有组件的状态,解决多件数据通讯。 

要点:

        1.  集中式管理数据状态方案

        2 . 数据是响应式的 (修改数据页面也会随之改变)


Vue项目的使用Vuex:

1.在新项目中使用:

       在配置vue-cli中创建项目时,直接选中Vuex项,这样就可以不用做任何配置了(脚手架会帮我们完成所有相关配置)

 2.在老项目中:

      (1)安装

    npm i vuex

      (2)配置

                   ——创建Vuex.store实例

                  ——向Vue实例注入store

        (3)使用。在组件中使用


Vuex五个主要内容

        1.state:统一定义公共数据(类似date)

        2.mutations: 用来修改数据的(类似于methods)

        3.getters:计算属性,对现在的状态进行计算得到新的数据----派生(类似于cpmputed)

        4.actions:异步操作,发起异步请求(发起axios请求)

        5.modules:模块拆分,将以上五个部分进行模块haul拆分


Vuex-state 定义公共数据

    state作用:定义公共数据并在组件中使用

s格式:

  1. new Vuex.store({
  2. state: {
  3. 属性名: 属性值
  4. }
  5. })

实例:

  1. new Vuex.store({
  2. state: {
  3. num:10,
  4. userInfo: {
  5. name: 'tom',
  6. skills: ['抖音', 'B站', '美团'],
  7. address: '武汉黑马',
  8. logo: 'https://vuejs.org/images/logo.svg'
  9. // https://www.runoob.com/wp-content/uploads/2016/02/react.png
  10. }
  11. }
  12. })

使用:

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

  this.$store.state.num

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

<div>num:{{$store.state.num}}</div>

Vuex-mutations 修改数据

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

定义格式:

  1. new Vue.store({
  2. // 省略其他...
  3. mutations:{
  4. // 每一项都是一个函数,可以声明两个形参
  5. mutation名1function(state [, 载荷]) {
  6. },
  7. mutation名2function(state [, 载荷]) {
  8. },
  9. }
  10. })

注意:

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

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

  • 第二个参数是可选的,表示载荷,是可选的。在使用时要传入的数据

 使用格式

this.$store.commit('mutation名', 实参)

实例:

  1. new Vuex.store({
  2. state: {
  3. num:10,
  4. userInfo: {
  5. name: 'tom',
  6. skills: ['抖音', 'B站', '美团'],
  7. address: '武汉黑马',
  8. logo: 'https://vuejs.org/images/logo.svg'
  9. // https://www.runoob.com/wp-content/uploads/2016/02/react.png
  10. }
  11. }
  12. })
  1. const url = 'http://s02.mifile.cn/assets/static/image/logo-mi2.png'
  2. this.$store.commit('changeUrl', url)


Vuex-getters 计算属性

getters作用:计算属性(类似于computed)在satate中的数据基础上进行一些加工的得到新的数据    !!!敲黑板(不会改变原来的数据)

 定义格式:

  1. new Vue.store({
  2. //省略其他
  3. getters:{
  4. gieters名1function(state){
  5. return 要返回的数据
  6. }
  7. }
  8. })

在组件中通过:$store.getters.getter的名字 来访问

$store.getters.getter

state,mutetions,getters 逻辑图


vuex用actions发异步请求

actions作用:

  • action中可以通过调用mutation来修改state,而不是直接变更转态
  • action可以包含任意异步(例如ajax请求)操作

定义actions

  1. new Vue.store({
  2. // 省略其他部分
  3. actions:{
  4. axtions名1:function(state,载荷){
  5. // 1.发起异步请求,请求数据
  6. // 2.通过$state.commit调用mutation来修改/保存数据
  7. }
  8. }
  9. })

调用格式

this.$state.dispatch('acthion名',参数)

实例:

  1. // 发ajax请求,从后端获取数据,再来去修改state中的数据
  2. actions: {
  3. getBooks (context, params) {
  4. console.log('getbooks的查询参数是', params)
  5. axios({
  6. url: 'https://www.fastmock.site/mock/37d3b9f13a48d528a9339fbed1b81bd5/book/api/books',
  7. method: 'GET'
  8. }).then(res => {
  9. console.log(res)
  10. context.commit('setBooks', res.data.data) //需要在mutations里面封装一个setBooks函数
  11. })
  12. }
  13. },
this.$store.dispatch('disBooks',{id:1})   //没有参数就不传

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


Vuex-用 modules 来拆分复杂业务

modules作用

  • 对实例Vuex.store的实参内容进行拆分,把复杂的场景模块进行拆分
  • 使代码更加清晰,更容易维护。

格式:

  1. export default new Vuex.store({
  2. stete:{},
  3. mutations:{},
  4. getters:{},
  5. actions:{},
  6. modules:{
  7. 模块名1:{
  8. //namespaced为true,则使用mutations必须要带上模块名
  9. namespaced:true,
  10. stete:{},
  11. mutations:{},
  12. getters:{},
  13. actions:{},
  14. modules
  15. },
  16. 模块名2:{
  17. //namespaced默认为false,使用mutations是可以不用带模块名
  18. namespaced:true,
  19. stete:{},
  20. mutations:{},
  21. getters:{},
  22. actions:{},
  23. modules
  24. },
  25. ......
  26. }
  27. })

访问模块中的数据:

  1. 获取state数据项:{{$store.state.模块名.数据项名}}
  2. 获取getters数据项:{{$store.getters['模块名/getters名']}}

访问模块中的mutations/actions:

  • 如果namespaced为true,则不需要额外去补充模块名
  • 如果namespaced为false,则需要额外补充模块名
  • 在使用modules时,建议都给加上namespaced!
  1. $store.commit('mutations名' , 参数) //namespaced为false
  2. $store.commit('模块名/mutations名' , 参数) //namespaced为true
  3. $store.dispath('dispath名' , 参数) //dispath为false
  4. $store.dispath('模块名/dispath名' , 参数) //dispath为true


 action和mution和state的关系图


Vuex-map函数用法汇总

        

场景

vuex中的数据与本组件内的数据名相同

格式

...mapState({'新名字': 'xxx'})

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/701046
推荐阅读
相关标签
  

闽ICP备14008679号