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 相关文章推荐
基于jquery实现状态限定编辑的代码
Feb 11 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
js实现精美的图片跟随鼠标效果实例
May 16 Javascript
JQuery中上下文选择器实现方法
May 18 Javascript
Bootstrap实现响应式导航栏效果
Dec 28 Javascript
JavaScript实现网页头部进度条刷新
Apr 16 Javascript
JS实现浏览上传文件的代码
Aug 23 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
Aug 14 Javascript
微信小程序基础教程之echart的使用
Jun 01 Javascript
javascript数组includes、reduce的基本使用
Jul 02 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作的文本留言本的例子(四)
2006/10/09 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
php文件扩展名判断及获取文件扩展名的N种方法
2015/09/12 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
JavaScript制作简易计算器(不用eval)
2017/02/05 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
pandas数据清洗,排序,索引设置,数据选取方法
2018/05/18 Python
python实现定时提取实时日志程序
2018/06/22 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
Python对HTML转义字符进行反转义的实现方法
2019/04/28 Python
python3中eval函数用法使用简介
2019/08/02 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python实现二分查找算法
2020/09/18 Python
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
工程概预算专业毕业生求职信
2013/10/04 职场文书
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
司机岗位职责
2013/11/15 职场文书
民族团结先进个人材料
2014/02/05 职场文书
劲霸男装广告词
2014/03/21 职场文书
协议书模板
2014/04/23 职场文书
安全责任书范文
2014/08/25 职场文书
汽车4S店销售经理岗位职责
2015/04/02 职场文书