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 相关文章推荐
使用EXT实现无刷新动态调用股票信息
Nov 01 Javascript
基于jquery的bankInput银行卡账号格式化
Aug 22 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
JavaScript使用Prototype实现面向对象的方法
Apr 14 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
利用javascript如何随机生成一定位数的密码
Sep 22 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
Oct 31 Javascript
微信小程序 下拉刷新及上拉加载原理解析
Nov 06 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
jQuery实现验证用户登录
Dec 10 jQuery
Vue中fragment.js使用方法小结
Feb 17 Javascript
编写v-for循环的技巧汇总
Dec 01 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
给apache2.2加上mod_encoding模块後 php5.2.0 处理url出现bug
2007/04/12 PHP
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
2013/06/05 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
laravel学习教程之存取器
2016/07/30 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
PHP中的self关键字详解
2019/06/23 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
PHP图像处理 imagestring添加图片水印与文字水印操作示例
2020/02/06 PHP
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
如何用ajax来创建一个XMLHttpRequest对象
2012/12/10 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
js中字符型和数值型数字的互相转化方法(必看)
2017/04/25 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
vue或react项目生产环境去掉console.log的操作
2020/09/02 Javascript
Vue 简单实现前端权限控制的示例
2020/12/25 Vue.js
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python的设计模式编程入门指南
2015/04/02 Python
Python中的zipfile模块使用详解
2015/06/25 Python
python学习 流程控制语句详解
2016/06/01 Python
python读取文本绘制动态速度曲线
2018/06/21 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
浅谈html5 video 移动端填坑记
2018/01/15 HTML / CSS
毕业生就业自荐信
2013/12/04 职场文书
建筑设计学生的自我评价
2014/01/16 职场文书
《胖乎乎的小手》教学反思
2014/02/26 职场文书
关于保护环境的建议书
2014/05/13 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python