vuex的使用方法

vuex

状态管理(vuex) store(集中式的存储管理)
什么时候用: 打算开发中大型应用
集中式数据管理, 一处修改,多处使用
思维流程:
store.js
this. s t o r e . c o m m i t ( ′ i n c r e m e n t ′ ) − > m u t a t i o n s t h i s . store.commit('increment') -> mutations this. store.commit(increment)>mutationsthis.store.dispatch(‘jia’) -> actions
mapActions() ->actions mapGetters() -> getters
员工 小组组长 项目总监 财务 董事长 员工
(view)component - dispatch > action -> mutation -> state <- getter <- component
发送请求 处理 修改状态
业务逻辑 修改state 读取state
异步

vuex流程图

1. 什么是状态?
  • 用一条数据去管理一个视图或是视图中的一部分,那么我们就将这个数据称之为状态
  • 官方说法:Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
  • 个人理解:Vuex是用来管理组件之间通信的一个插件
2.为什么要用Vuex?

我们知道组件之间是独立的,组件之间想要实现通信,我目前知道的就只有props选项,但这也仅限于父组件和子组件之间的通信。如果兄弟组件之间想要实现通信呢?嗯…,方法应该有。抛开怎么实现的问题,试想一下,当做中大型项目时,面对一大堆组件之间的通信,还有一大堆的逻辑代码,会不会很抓狂??那为何不把组件之间共享的数据给“拎”出来,在一定的规则下管理这些数据呢? 这就是Vuex的基本思想了。

3. 什么是状态管理?
  • 用一条数据去管理一个视图或是视图中的一部分,那么我们就将这个数据称之为状态,这种管理的形式我们称之为 状态管理
4. vuex是做什么的?(概念)
  • vuex是一个集中式的存储仓库【状态】,类似于 本地存储、数据库,vuex是vue的状态管理工具,它的功能主要是实现多组件间的状态【数据】共享
5. vuex的组成部分
state 状态

state 是一个对象,对象中的每一个key , 就是一个状态


const state = {
count: 0
}
export default state
action 动作(业务交互)
  • action 也是一个对象, 对象中的每一个key的value是方法,方法时用来处理业务逻辑的
  • action的作用是用来发送一个动作action
  • action 发送的动作action 是一个对象,对象中可以有两个参数 type payload
  • actions 中的方法可以有两个参数,分别是 store实例里面的方法、 从视图发送过来的实际参数
第一个参数:
{
commit: ƒ boundCommit(type, payload, options)
dispatch: ƒ boundDispatch(type, payload)
getters: {}
rootGetters: {}
rootState: {__ob__: Observer}
state: {__ob__: Observer}
__proto__: Object
}

第二个参数:
视图传过来的实际参数
actions 和 mutations 要想沟通, 我们通过 commit 来进行沟通, commit 是发送一个动作
actions 方法中的动作可以有两个参数 type payload
type 就是 mutations 中方法的名称

  • type 要求是一个常量,理由:常量比较稳定,安全性高
    payload 就是传递给mutations放发的实际参数
//导入常量
// import { INCREMENT } from './type';
import * as type from './type'
const actions = {
increment({ commit }, value) {
// console.log('action 触发了')
let action = {
// type: INCREMENT,
type: type.INCREMENT,
payload: value
}
commit(action)
}
}
export default actions

mutation 修改state
  1. mutations 也是一个对象
  2. mutations 是用来修改数据的
  3. mutaions 中存储的也是方法
  4. mutaions中的方法名称我们可以用常量表示
  5. mutaions 中的方法 可以有连个参数 , 分别是: state, action
  • state 就是 store中的state
  • action就是actions中方法发送过来的action
import * as type from './type'
const mutations = {
[type.INCREMENT] ( state,action ) {
// console.log('mutaions',a)
// console.log('mutaions',b)
// console.log('mutations 出发了')
state.count ++
}
}
export default mutations
getter 获取数据的
  • getters 也是一个对象,用来获取状态的
  • getters 里面存放的还是方法
const getters = {
}
export default getters

store state的存储者

new Vuex.Store({}) 表示创建一个Vuex实例,通常情况下,他需要注入到Vue实例里. Store是Vuex的一个核心方法,字面上理解为“仓库”的意思。Vuex Store是响应式的,当Vue组件从store中读取状态(state选项)时,若store中的状态发生更新时,他会及时的响应给其他的组件(类似双向数据绑定) 而且不能直接改变store的状态,改变状态的唯一方法就是,显式地提交更改(mutations选项)

6. 应用场景
  • . 相对比较大型的应用(状态较多)
7. 判断你的项目是不是应该使用vuex
  • . 当你觉得你的项目不需要vuex的时候,那么就不用
  • . 你觉得需要的时候,就直接使用
8. vuex的使用方案有哪些?(state修改前,state修改后)
  • . 前标准,后标准
  • . 前标准,后非标准 √
  • . 前非标准,后标准
  • . 前非标准,后非标准
9.如何使用vuex

1、首先用npm包管理工具,安装vuex

//因为这个包在生产环境中也要使用,所以在这里一定要加上 –save
npm install vuex --save

2、然后在main.js当中引入vuex

import vuex from 'vuex'

3、使用vuex

Vue.use(vuex);//使用vuex
//创建一个常量对象
const state={
    isRed:false
}
var store = new vuex.Store({//创建vuex中的store对象
    state
})

4、随后在实例化Vue对象时,加入store对象:

 new Vue({
    el: '#app',
    router,
    store,//使用store
    template: '<App/>',
    components: { App }
})

5、最后再将最初的示例修改为:

<!-------------------------------------父组件--------------------------------->
<template>
    <div>
        {{$store.state.isRed}}
        <children></children>
    </div>
</template>
<script>
    import children from "@/components/children"
    export default {
        components: {
            children
        }
    }
</script>
<!-------------------------------子组件--------------------------------->
<template>
     <div>
         <input type="button" 
                :class="{active:$store.state.isRed}"  
                value="改变"
               @click="$store.state.isRed=!$store.state.isRed">
     </div>
</template>
<script>
    export default {}   
</script>
<style scoped>
    .active{
        background:red;
    }
</style>

到目前为止,这个示例就被简化了很多?前面将代码都写到了main.js中了,为了日后便于维护,更好的管理vuex,最好对vuex进行一些调整。

1、在src文件夹根目录创建vuex文件夹,然后在该文件夹内创建store.js文件。然后在文件内引入vue和vuex。

import Vue from 'vue';
import Vuex from 'vuex';

2、然后使用Vuex

Vue.use(Vuex );//使用Vuex 
//创建一个常量对象
const state={
    isRed:false
}
//让外部引用vuex
export default new Vuex.Store({//创建vuex中的store对象
    state
})

3、然后将main.js之前写入的与vuex相关的内容清除掉,引入刚刚创建的store.js文件

import store from '@/vuex/store'

4、在实例化Vue对象时,加入引入的store对象:

 new Vue({
    el: '#app',
    router,
    store,//使用store
    template: '<App/>',
    components: { App }
})

5、npm run dev,正常运行!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值