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 13 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
js用typeof方法判断undefined类型
Jul 15 Javascript
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
Feb 02 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
JavaScript中setTimeout的那些事儿
Nov 14 Javascript
AngularJS表格样式简单设置方法示例
Mar 03 Javascript
jQuery实现的简单在线计算器功能
May 11 jQuery
详解小程序缓存插件(mrc)
Aug 17 Javascript
layer实现弹出层自动调节位置
Sep 05 Javascript
浅谈Ant Design Pro 菜单自定义 icon
Nov 17 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
mysql 字段类型说明
2007/04/27 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
程序员的表白神器“520”大声喊出来
2016/05/20 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
JavaScript模板引擎Template.js使用详解
2016/12/15 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
详解Python中的文件操作
2016/08/28 Python
Python 支付整合开发包的实现
2019/01/23 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
python中栈的原理及实现方法示例
2019/11/27 Python
Python通过socketserver处理多个链接
2020/03/18 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
关于iframe跨域使用postMessage的实现
2019/10/29 HTML / CSS
HTML5 Blob 实现文件下载功能的示例代码
2019/11/29 HTML / CSS
食堂个人先进事迹
2014/01/22 职场文书
合伙购房协议样本
2014/10/06 职场文书
培训通知
2015/04/17 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
初一年级组工作总结
2015/08/12 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
mysql数据库如何转移到oracle
2022/12/24 MySQL