在 vue-cli 中,使用VueX,并解决刷新state数据丢失问题
2018-12-06 16:39
609 查看
1. NPM安装
npm install vuex --save
官网推荐安装 es6-promise
官方解释:如果你支持的浏览器并没有实现 Promise (比如 IE),那么你可以使用一个 polyfill 的库,例如 es6-promise
npm install es6-promise --save
2.在 src 文件夹下新建 store 文件夹,并在新建的 store 文件夹下新建以下几个文件夹
- state.js 文件夹
export default { msg: 0, }
- mutations.js 文件夹
export default { mutationsAdd(state) { state.msg++ }, }
这个 js 中处理同步数据
在页面的 methods 的方法中使用
this.$store.commit('mutationsAdd')调用
- actions.js 文件夹
export default { actionsAdd(context) { setTimeout(() => { context.commit('mutationsAdd') }, 1000); }, }
这个 js 中处理异步数据
在页面的 methods 的方法中使用
this.$store.dispatch('actionsAdd')调用
- getters.js 文件夹
export default { doneTodos(state) { if (state.msg >= 5) { state.msg = 0; return state.msg } else { return state.msg } } }
这个 js 处理状态,进行数据过滤,
在页面的 template 中使用
{{ $store.getters.doneTodos }}渲染
- index.js 文件夹
import Vue from 'vue' import Vuex from 'vuex' import state from './state' import actions from './actions' import mutations from './mutations' import getters from './getters' Vue.use(Vuex); export default new Vuex.Store({ state: state, actions: actions, mutations: mutations, getters: getters });
假如按官方推荐安装了 es6-promise ,那么在 index.js 中还需要添加
import 'es6-promise/auto'
3.在 main.js 中添加
import store from './store'
并同 router 一样,需要注入
new Vue({ el: '#app', router, store, components: {App}, template: '<App/>' });
4.当然,这之间也可以传值,不过只能传一个值,数据格式不限
- 页面方法中调用
this.$store.dispatch('actionsAdd', {a: 4, b: 3})
- actions.js
export default { actionsAdd(context,data) { setTimeout(() => { context.commit('mutationsAdd',data) }, 200); }, }
- mutations.js
export default { mutationsAdd(state, data) { state.msg = data.a }, }
5.VueX中的数据在页面刷新时会丢失问题
- 可以在 App.js 的 created 生命周期中添加
if (sessionStorage.getItem("store")) { this.$store.replaceState(Object.assign({}, this.$store.state, JSON.parse(sessionStorage.getItem("store")))) } window.addEventListener("beforeunload", () => { sessionStorage.setItem("store", JSON.stringify(this.$store.state)) });
当然使用 sessionStorage 或者使用 localStorage 都可以
- 最后清除本地缓存
sessionStorage.removeItem('store')
相关文章推荐
- 使用localStorage解决浏览器刷新后无法再从vuex中获取数据的问题
- 解决vuex在页面刷新后数据丢失的问题
- 使用sessionStorage解决vuex在页面刷新后数据被清除的问题
- 使用sessionStorage解决vuex在页面刷新后数据被清除的问题
- 结合localStorage解决vuex页面刷新数据丢失的问题
- 解决vue-cli中stylus无法使用的问题方法
- 关于页面刷新vuex数据消失问题解决方案
- Vuejs刷新页面子组件数据丢失问题的一点笔记
- ListView中使用EditText(解决EditText焦点丢失、保存数据以及滚动冲突的问题)
- vue-cli的axios使用方法,get、post请求的跨域问题解决
- vue.js中使用axios数据请求遇到的问题这篇文章帮你妥妥的解决
- $state.transitionto不刷新数据问题解决方法
- 【vue2.0】解决使用vue-cli生成项目后项目地址自动添加#号的问题
- 通过localStorage解决vuex中的信息页面刷新丢失的问题
- 解决使用Vue.js显示数据的时,页面闪现原始代码的问题
- 基于vue-cli的vue项目之vuex的使用5------watch监听vuex内部数据变化
- 在vue中使用axios跨域访问数据,用proxyTable解决跨域问题
- 解决vue页面刷新或者后退参数丢失的问题
- vuex插件【vuex-persistedstate】页面刷新数据丢失
- 使用Vuex解决Vue中的身份验证问题