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 相关文章推荐
Maps Javascript
Jan 22 Javascript
多浏览器兼容的获取元素和鼠标的位置的js代码
Dec 15 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
javascript事件模型实例分析
Jan 30 Javascript
jquery实现用户信息修改验证输入方法汇总
Jul 18 Javascript
基于node实现websocket协议
Apr 25 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
Sep 20 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
vue 实现类似淘宝星级评分的示例
Mar 01 Javascript
一个基于react的图片裁剪组件示例
Apr 18 Javascript
js常用正则表达式集锦
May 17 Javascript
vue操作dom元素的3种方法示例
Sep 20 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实现最简单的MVC框架实例教程
2014/09/08 PHP
使用PHP编写发红包程序
2015/07/22 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
JavaScript的Function详细
2006/11/14 Javascript
List the Codec Files on a Computer
2007/06/18 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
vue+elementUI组件table实现前端分页功能
2020/11/15 Javascript
Python字符转换
2008/09/06 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Python创建对称矩阵的方法示例【基于numpy模块】
2017/10/12 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
python 计算两个列表的相关系数的实现
2019/08/29 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
2020/01/10 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
python的数学算法函数及公式用法
2020/11/18 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
2021/01/29 Python
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
2013年保送生自荐信格式
2013/11/20 职场文书
员工趣味活动方案
2014/08/27 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
春节晚会开场白
2015/05/29 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL