storagex-js 1.4.1
必须先安装并导入storagex-js
//使用npm安装
npm install storagex-js
//导入 需要什么就导入什么 所有方法皆是同步方法
import {
removeStorageItem,
storageX,
StorageX,
localStorageX,
LocalStorageX,
sessionStorageX,
SessionStorageX,
uniStorageX,
UniStorageX,
wxStorageX,
WxStorageX,
} from "storagex-js";
保存模式(下文使用)
mode:可选值local,session,uni,wx
local:localStorage,session:sessionStorage,uni:uniApp本地存储,wx:微信小程序本地存储
操作方法
使用上面介绍的方法生成代理对象。对代理对象的操作会将代理对象保存在本地。控制代理对象有两种模式
1:只需使用键值
const storageObj= <调用方法生成代理对象>; //下面会详细说明如何生成
storageObj.a = {b:1}; //'a' 对应的值 {'b':'1'}
storageObj.a.b = 2 //无效,不允许深度修改
//需要这样
storageObj.a = {b:2};
2:深度对象存储(仅适用于值)
//因为考虑到如果需要深度代理那么值一定是个对象
let state = { //需要初始化的值
a:1,
b:{
c:3,
},
};
const storageObj = <调用方法生成可深度代理对象>;
//当storageObj的属性发生变化时会相应的将state存储到本地。
storageObj.a = 1;
storageObj.a = {b:{c:{d:2}}};
storageObj.a.c.d = 3;
console.log(storageObj.a.c.d); //打印 3
//只针对值为对象时,而且只会对该对象属性进行修改添加,也就是说像下面这样不管用
storageObj = null;
storageObj = 1;
storageObj = {a:1};
//了解js基础都知道,这样只是改变该变量的指向,并不是对原对象进行修改。
//如果想修改键的值请使用上面的那种方式。
不同方法说明,类似跳过
1:使用RemoveStorageItem
//key :需要删除数据的键,mode:储存模式(默认:local)
removeStorageItem(<key>,<mode>);
II:使用 storageX
1:生成基于键值工作的代理对象
const storageObj= storageX(undefined,undefined,<mode>); //mode必填
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = storageX(
"state", //储存所对应的键
state, //初始化的值,如果该键有数据且为对象时优先代理
<mode>, //存储模式
);
3:删除
storageObj.removeItem(<key>,<mode>);
第 3 部分:使用 StorageX(基于对象的创建)
1:生成基于键值工作的代理对象
const storageObj= new StorageX({
mode:<mode>, //必填
});
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = new StorageX({
key:'state',
target:state,
mode:<mode>,
});
四:如何使用localStorageX
1:生成基于键值工作的代理对象
const storageObj= localStorageX();
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = localStorageX(
"state", //储存所对应的键
state, //初始化的值,如果该键有数据且为对象时优先代理
);
五:使用LocalStorageX(基于对象的创建)
1:生成基于键值工作的代理对象
const storageObj= new LocalStorageX();
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = new LocalStorageX({
key:'state',
target:state,
});
3:删除
1:使用RemoveStorageItem
//key :需要删除数据的键,mode:储存模式(默认:local)
removeStorageItem(<key>,<mode>);
II:使用 storageX
1:生成基于键值工作的代理对象
const storageObj= storageX(undefined,undefined,<mode>); //mode必填
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = storageX(
"state", //储存所对应的键
state, //初始化的值,如果该键有数据且为对象时优先代理
<mode>, //存储模式
);
3:删除
storageObj.removeItem(<key>,<mode>);
第 3 部分:使用 StorageX(基于对象的创建)
1:生成基于键值工作的代理对象
const storageObj= new StorageX({
mode:<mode>, //必填
});
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = new StorageX({
key:'state',
target:state,
mode:<mode>,
});
四:如何使用localStorageX
1:生成基于键值工作的代理对象
const storageObj= localStorageX();
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = localStorageX(
"state", //储存所对应的键
state, //初始化的值,如果该键有数据且为对象时优先代理
);
五:使用LocalStorageX(基于对象的创建)
1:生成基于键值工作的代理对象
const storageObj= new LocalStorageX();
2:生成可深度操作的代理对象
let state = {
a:1,
b:{
c:3,
},
};
const storageObj = new LocalStorageX({
key:'state',
target:state,
});
3:删除
##其他模式的方法都差不多,这里不再赘述。
不支持函数存储,因为函数无法JSON化。为什么函数需要存储,因为它们是数据?
可能出现的问题:因为基于深度对象的Agent不可避免地会遇到大量数据的循环变化,将每个变化保存一次会消耗太多的性能,所以如果一个作业中有多个变化,那么最多保存两次。一种是第一次修改就保存一次,另一种是创建宏任务,运行后保存(类似js写的防抖功能)。
开发日记
1.4.1 修改不深的代理对象后立即更新到本地存储
1.4 以添加类的形式引入
1.3修复BUG
保存字符串时有两个额外的冒号(致命错误)
1.2 修复BUG
1:当存储为数组时,内置的map、filter等方法如果取出来重新分配就会丢失。原因:json化数据时,激活了agent的set属性,调用了clone方法,因为当时数据存储被认为是简单的克隆,现在删除了克隆。错误已修复。
2:直接调用localStorageX()生成对象来管理键值和更深层次的值。我认为这不好。解决办法:取消深度代理。
文字博客
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。