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 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
用jquery和json从后台获得数据集的代码
Nov 07 Javascript
js计算任意值之间随机数的方法
Jan 16 Javascript
JS实现图片高亮展示效果实例
Nov 24 Javascript
js右下角弹出提示框示例代码
Jan 12 Javascript
Node.js实现发送邮件功能
Nov 06 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
js实现简单的秒表
Jan 16 Javascript
Jquery滑动门/tab切换实现方法完整示例
Jun 05 jQuery
Vue自定义render统一项目组弹框功能
Jun 07 Javascript
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
什么是SOLID
Mar 24 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
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
Drupal7中常用的数据库操作实例
2014/03/02 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
2014/11/29 PHP
ThinkPHP路由机制简介
2016/03/23 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP中的日期时间处理利器实例(Carbon)
2017/06/09 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
python中找出numpy array数组的最值及其索引方法
2018/04/17 Python
python实现QQ批量登录功能
2019/06/19 Python
python的常见矩阵运算(小结)
2019/08/07 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
人事档案接收函
2014/01/12 职场文书
事业单位辞职信范文
2014/01/19 职场文书
保健品市场营销方案
2014/03/31 职场文书
自我工作评价范文
2015/03/06 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
openstack中的rpc远程调用的方法
2021/07/09 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers