weex里Vuex state使用storage持久化详解


Posted in Javascript onSeptember 09, 2017

在weex里使用Vuex作为state管理工具,问题来了,如何使得state可以持久化呢?weex官方提供store模块,因此我们可以尝试使用该模块来持久化state。

先看下该模块介绍:

storage 是一个在前端比较常用的模块,可以对本地数据进行存储、修改、删除,并且该数据是永久保存的,除非手动清除或者代码清除。但是,storage 模块有一个限制就是浏览器端(H5)只能存储小于5M的数据,因为在 H5/Web 端的实现是采用 HTML5 LocalStorage API。而 Android 和 iOS 这块是没什么限制的。

首先,引入模块:

const storage = weex.requireModule('storage')

定义state

var state = {

  banner:[],

  activeTabIndex:0,

  lists: {

    searchList:[],

    tabColumns: {

      new:[],

      hot:[],

      select:[]

    },

    items:[]

  }

}

初始化时,从storage加载state数据 

// 从storage里加载数据

storage.getItem(STORAGE_KEY, event => {

 if (event.result == "success" && event.data){

   // 这里可以使用extend等方法,这里仅举例说明

   var data = JSON.parse(event.data);

   state.banner = data.banner;

   state.activeTabIndex = data.activeTabIndex;

 }

})

关键来了,如何存储?Vuex提供了插件机制,我们可以通过插件订阅state的每一次更改,在更改的时候保存我们感兴趣的就OK了

// 存储plugin,存储感兴趣的数据,store里数据太多,没必要全持久化

const storagePlugin = store => {

 store.subscribe((mutation, {activeTabIndex,banner}) => {

  storage.setItem(STORAGE_KEY, JSON.stringify({activeTabIndex,banner}),event => {

   console.log('cache success');

  })

 })

}

最后,创建Vuex,大功告成 

const store = new Vuex.Store({

 actions,

 mutations,

 plugins:[storagePlugin],

 

 state: state,

 

 getters: {

  // ids of the items that should be currently displayed based on

  // current list type and current pagination

  activeIds (state) {

   const { activeType, lists, counts } = state

   return activeType ? lists[activeType].slice(0, counts[activeType]) : []

  },

 

  // items that should be currently displayed.

  // this Array may not be fully fetched.

  activeItems (state, getters) {

   return getters.activeIds.map(id => state.items[id]).filter(_ => _)

  }

 }

})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中使用正则计算中文长度的例子
Apr 29 Javascript
jquery根据属性和index来查找属性值并操作
Jul 25 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
使用Web Uploader实现多文件上传
Jun 08 Javascript
使用纯JS代码判断字符串中有多少汉字的实现方法(超简单实用)
Nov 12 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
May 24 Javascript
Webpack如何引入bootstrap的方法
Jun 17 Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
Vue 按键修饰符处理事件的方法
May 04 Javascript
微信小程序如何使用globalData的方法
Jun 06 Javascript
vue项目中使用多选框的实例代码
Jul 22 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 Javascript
Vue2几种常见开局方式详解
Sep 09 #Javascript
使用JS动态显示文本
Sep 09 #Javascript
深入理解ES7的async/await的用法
Sep 09 #Javascript
jQuery事件对象的属性和方法详解
Sep 09 #jQuery
微信通过页面(H5)直接打开本地app的解决方法
Sep 09 #Javascript
React-Native中禁用Navigator手势返回的示例代码
Sep 09 #Javascript
js实现音乐播放控制条
Sep 09 #Javascript
You might like
hessian 在PHP中的使用介绍
2010/12/13 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
php微信开发之关注事件
2018/06/14 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
javascript Excel操作知识点
2009/04/24 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
IONIC自定义subheader的最佳解决方案
2016/09/22 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
python如何实现一个刷网页小程序
2018/11/27 Python
浅谈python标准库--functools.partial
2019/03/13 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
2020/04/26 Python
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
开展党的群众路线教育实践活动方案
2014/02/05 职场文书
路政管理求职信
2014/06/18 职场文书
三严三实学习心得体会
2014/10/13 职场文书
个人年底工作总结
2015/03/10 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书