博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue 状态管理(三)
阅读量:7072 次
发布时间:2019-06-28

本文共 2055 字,大约阅读时间需要 6 分钟。

vue 状态管理(三)

我们修改 state,然后刷新浏览器,状态又变化原来的了,因为 state 是存在内存中的,为了点击刷新,状态不回到原来的,就需要 Vuex 提供的插件功能,当然插件还能实现其他复杂的功能。

插件

Vuex 的 store 接受 plugins 选项,这个选项暴露出每次 mutation 的钩子。Vuex 插件就是一个函数,它接收 store 作为唯一参数:

const myPlugin = store => {  // 当 store 初始化后调用  store.subscribe((mutation, state) => {    // 每次 mutation 之后调用    // mutation 的格式为 { type, payload }  })}复制代码

使用插件:

const store = new Vuex.Store({  // ...  plugins: [myPlugin]})复制代码

使用插件本地 state 持久化。

//localstore.jsexport default store => {	// 当 store 初始化后调用	console.log('store 初始化', JSON.stringify(store.state, '', 2))	// 已经初始化 	// 不能 store.state = '' 直接赋值方式改变 state	if (localStorage.getItem('state')) store.replaceState(JSON.parse(localStorage.state))	store.subscribe((mutation, state) => {		// 每次 mutation 之后调用		localStorage.state = ''		try {			localStorage.setItem('state', JSON.stringify(state))		} catch (error) {			console.log('持久化遇到错误')			console.error(error)		}		console.log('mutation', mutation)		// mutation 的格式为 { type, payload }	})}复制代码

修改 store

// 引入插件import { localStore } from './plugins'Vue.use(Vuex)export default new Vuex.Store({	state,	getters,	mutations,	actions,	modules: {		user	},	plugins: [localStore]})复制代码

启用插件后,调用 commit 更新 state 后,会更新本地存储,即使实现浏览器,值也不会变。

处理表单

在学习 mutations 时,我们使用表单的值更新state,我们这样写

				

年纪:{

{this.$store.state.age}}

复制代码
import { mapMutations } from 'vuex'	export default {		name: 'Store',		data() {			return {				age: '',				lastName: ""			}		},		methods: {			//方法名和 muations 相同			...mapMutations(['CHANGE_LAST_NAME', 'CHANGE_AGE']),			// 将 `this.changeAge2()` 映射为 `this.$store.commit('CHANGE_AGE')`			...mapMutations({ changeAgeAlias: 'CHANGE_AGE' }),			changeAge2() {				this.changeAgeAlias({ age: Number.parseInt(this.age) })			},			changeLastName() {				// this.$store.commit('CHANGE_LAST_NAME', this.lastName)				this.CHANGE_LAST_NAME(this.lastName)			},		}	}复制代码

以上方式都是在方法中提获取表单的输入值,需要再data里生属性。其实我们可以在计算属性中使用settergetter中实现,充分利用 v-model 双向绑定的特性来简化了代码。

转载于:https://juejin.im/post/5d05d3d651882546dd100c73

你可能感兴趣的文章
python并发编程之多进程
查看>>
2019.4.17 区块链论文翻译
查看>>
Loj #2494. 「AHOI / HNOI2018」寻宝游戏
查看>>
浅谈卷积和C++实现
查看>>
RabbitMQ队列/Redis缓存
查看>>
进阶第八课 Python模块之textwrap
查看>>
spring boot 配置mybatis plus 控制台打印sql
查看>>
<video/><img/>路径带中文,显示乱码(URIEncoding)
查看>>
用Java制作一个简单的图片验证码
查看>>
iOS开发中如何给UITableViewCell添加动画
查看>>
测试开发面试准备之HTTP协议-三次握手
查看>>
angularjs modal模态框----创建可拖动的指令
查看>>
Sterling学习
查看>>
SQL Server进制
查看>>
Entity Framework 批量插入很慢
查看>>
再次写给我们这些浮躁的程序员
查看>>
如何把大段文字转为带html标签的文字
查看>>
JS的正则表达式
查看>>
emmc boot_config文件不存在
查看>>
Linux上rpm实战搭建FTP服务器
查看>>