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 面向对象技术基础教程
Mar 03 Javascript
jquery实现手机发送验证码的倒计时代码
Feb 12 Javascript
jQuery学习笔记之2个小技巧
Jan 19 Javascript
javascript实现方法调用与方法触发小结
Mar 26 Javascript
JavaScript中匿名函数的用法及优缺点详解
Jun 01 Javascript
webpack入门必知必会
Jan 16 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
vue 二维码长按保存和复制内容操作
Sep 22 Javascript
如何在 Vue 中使用 JSX
Feb 14 Vue.js
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和ACCESS写聊天室(九)
2006/10/09 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
Python错误处理操作示例
2018/07/18 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
python时间日期操作方法实例小结
2020/02/06 Python
python Zmail模块简介与使用示例
2020/12/19 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
求职自荐书范文
2013/12/04 职场文书
优秀护士获奖感言
2014/02/20 职场文书
文化活动实施方案
2014/03/28 职场文书
本科生自荐信
2014/06/18 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
Pytest中conftest.py的用法
2021/06/27 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript