vuex的基础入门

当我们的应用遇到多个组件共享状态时,多个视图依赖于同一个状态,来自不同视图的行为需要变更同一状态,需要用到vuex解决需求

vuex 是 vue 的状态管理器,存储的数据是响应式的。但是并不会保存起来,刷新之后就回到了初始状态,具体做法应该在vuex里数据改变的时候把数据拷贝一份保存到localStorage里面,刷新之后,如果localStorage里有保存的数据,取出来再替换store里的state。

在这里插入图片描述

vuex的使用

在这里插入图片描述

mutation-可以看出mutation是用来修改数据的方法,我们为什么不直接new一个State来改数据呢?而是在mutation里传入数据再commit提交来修数据呢?vuex这样做是为了跟方便的记录下数据的变更记录和轨迹,为了后面的监听和回滚之类的操作

action-为了更方便的操作mutaion一些异步操作等,就是在mutation外包裹了一层方法

getters-从基本数据派生的数据

state-基础数据

新建一个store文件下的index.js文件

import vue from 'vue'
import vuex form 'vuex'
vue.use(vuex)
// 创建容器对象
const stroe = new Vuex.Stroe({
	// 容器数据
    state: {
        count:0  // 在组件模板中使用直接通过$store.state.count
	},
    // 容器的方法放到mutations,修改容器数据必须通过mutations
    mutations: {  // mutations函数中只能传递一个自定义参数
        // state是内置参数
    	setState (state, data) {
            // 0 = 123
            state.count = data
            sessionStorage.setItem('globalCount', data)
        }  // 在组件模板中使用$store.commit('haha', '123')
	},
    // 主要用来执行异步操作,提交mutation
    // actions有默认参数--容器对象,在acution中不能修改容器数据
    actions: {
        promiseCommit((context) => {
        	setTimeout(() => {  // 执行异步操作
	        	context.commit('setState', '456')
	        }, 1000)
        })
    },
    getters: {
        getCount (state) {
           return  state.count ? state.count : sessionStorage.getItem('globalCount')
        },
        // getters返回函数 来完成传参
        getComputedCount: (state) => (id) => {
			return state.count + id
        }
    }
})
export default store 

在main.js中引入

import store from './store'
// 为了在 Vue 组件中访问 this.$store property,你需要为 Vue 实例提供创建好的 store。Vuex 提供了一个从根组件向所有子组件,以 store 选项的方式“注入”该 store 的机制
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

在项目中任何地方使用

<template>
	<div>
	{{ count }}
	</div>
</template>
export default {
	data () {
		return {
			count: this.$store.getters.getCount // 0
			computedCount: this.$store.getters.getComputedCount(2) // 2
		}
	},
	mounted () {
		// 同步修改vuex数据
		this.$store.commit('setState', 777)
		// 异步修改vuex数据
		this.$store.dispatch('promiseCommit')
	}
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值