07-VueX

1.Vuex概述

1.1.组件之间共享数据的方式

  • 父向子传值: v-bind 属性绑定
  • 子向父传值: v-on 事件绑定
  • 兄弟组件之间共享数据: EventBus
    • $on 接收数据的那个组件
    • $emit 发送数据的那个组件

注意:以上只能实现小范围的数据之间的共享

1.2.vuex是什么?

Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享
在这里插入图片描述

1.3.使用Vuex管理数据的好处

  • A.能够在vuex中集中管理共享的数据,便于开发和后期进行维护

  • B.能够高效的实现组件之间的数据共享,提高开发效率

  • C.存储在vuex中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新

1.4.什么样的数据适合存储在vuex中

一般情况下:

  • 只有组件之间共享的数据,才有必要存储到 vuex 中。
  • 对于组件中的私有数据,依旧存储在组件自身的 data 中即可 。

2.Vuex的基本使用

首先创建一个VUE项目

2.1.vuex的基本使用

  • 1、安装 vuex 的依赖包

npm install vuex --save

  • 2、在项目中导入 vuex 包,并将其挂载到vue根组件中

import Vuex from ‘vuex’
Vue.use(Vuex)

  • 3、创建 store 对象

const store = new Vuex.Store({
// state 中存放的就是全局共享的数据
state: { count: 0 }
})

  • 4、将 store 对象挂载到 vue 实例中

new Vue({
el: ‘#app’,
render: h => h(app),
router,
// 将创建的共享数据对象,挂载到 Vue 实例中
// 所有的组件,就可以直接从 store 中获取全局的数据了
store
})

3.Vuex中的核心特性(重点)

  • Vuex 中的主要核心概念如下:State,Mutation,Action,Getter

3.1.state

State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储

  • 例如,打开项目中的store.js文件,在state对象中可以添加我们要共享的数据,count。
//创建store数据源,提供唯一公共数据
const store=new Vue.Store({
	state:{count:0},
	....
})
  • 组件访问state中数据的:第一种方式:
this.$store.state.全局数据名称  如:this.$store.state.count

<div>{{this.$store.state.count}}</div>
  • 组件访问state中数据的:第二种方式
//将全局数据映射为当前组件的计算属性
先按需导入mapState函数:
import { mapState } from 'vuex'
然后数据映射为计算属性:
computed:{ ...mapState(['全局数据名称'])}

<div>{{全局数据名称}}</div>

3.2.mutation

Mutation用于修改变更store中的数据

使用方式:第一种

  • 1、打开store.js文件,在mutations中添加代码如下
mutations: {
    add(state,step){
      //第一个形参永远都是state也就是$state对象
      //第二个形参是调用add时传递的参数
      state.count+=step;
    }
  }
  • 然后在vue组件中给按钮添加事件代码如下:
<button @click="Add">+1</button>
methods:{
  Add(){
    //使用commit函数调用mutations中的对应函数,
    //第一个参数就是我们要调用的mutations中的函数名
    //第二个参数就是传递给add函数的参数
    this.$store.commit('add',10)
  }
}

使用方式:第二种

//将mutation映射为当前组件的函数
先按需导入mapMutations函数:
import { mapMutations } from 'vuex'
然后mutation映射为组件函数:
methods:{
   //获得mapMutations映射的add函数
   ...mapMutations(['add'])
   //当点击按钮时触发Add函数
   Add(){
      //调用add函数完成对数据的操作
      this.add(10);
      }
}

3.3.action

在mutations中不能编写异步的代码,会导致vue调试器的显示出错,在vuex中我们可以使用Action来执行异步操作。

注意:actions并不直接的改变state,而是发起mutations

使用方式:第一种

  • 打开store.js文件,修改action,如下:
actions: {
   //actions中的函数最终还是要调用mutations的函数,只有mutations中的函数可以修改state中的值
   mutations:{
   	add(state,step){
   		state.count+=step;
   	}
   }
  //第一个参数永远都是context
  //传过来的参数使用第二个参数来接收
  addAsync(context,step){
    setTimeout(()=>{
      //使用commit函数调用mutations中的对应函数
      context.commit('add',step);
    },2000)
  }
}
  • 然后在vue组件中给按钮添加事件代码如下:
methods:{
  AddAsync(){
   //使用dispatch函数调用actions中的对应函数,
   //第一个参数就是我们要调用的actions中的函数名
   //第二个参数就是传递给函数的参数
    this.$store.dispatch('addAsync',5)
  }
}

使用方式:第二种

//从vuex中按需导入mapActions函数
import { mapActions } from 'vuex'
//将指定的actions函数,映射为当前组件的methods函数
methods:{
  //获得mapActions映射的addSync函数
  ...mapMutations(['addAsync'])
  AddSync(){
      //调用addSync函数完成对数据的操作
      this.addaync(10);
      }
}

3.4.getter

Getter用于对store中的数据进行加工处理形成新的数据,它只会包装store中保存的数据,并不会修改store中原来保存的数据,当刷新时页面中呈现的还是原来的数据。

当store中的数据发生变化时,Getter生成的内容也会随之变化

使用方式:第一种

  • 打开store.js文件,添加getters,如下:
export default new Vuex.Store({
  .......
  getters:{
    //使用showNum属性来包装state中的count属性(注意:只有mutations中的函数可以修改state中的值)
    showNum : state =>{
      return state.count;
    }
  }
})
  • 然后在vue组件中添加插值表达式使用getters
<h3>{{$store.getters.showNum}}</h3>

使用方式:第二种

//在组件中,导入mapGetters,并将之映射为计算属性
import { mapGetters } from 'vuex'

//getter类似于vue的计算属性
computed:{
  ...mapGetters(['showNum'])
}

3.5.module

store可以分为模块,每个模块有自己的,state,getter,mutation,action

例如:为了数据便于区分,使用三个js文件存放了全局数据:store1.js,store2.js,store3.js,每个js中都包含上面的三到四个属性

import Vue from 'vue'
import Vuex from 'vuex'
import store1 from './store1.js'
import store2 from './store2.js'
import store3 from './store3.js'

// 注入到根实例
Vue.use(Vuex)
// 这个js引入了store1.js,store2.js,store3.js
const store = new Vuex.Store({
    modules: {
        configure,
        user,
        song
    }
})

export default store
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彤彤的小跟班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值