Security News
Bun 1.2 Released with 90% Node.js Compatibility and Built-in S3 Object Support
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
tua-storage
Advanced tools
🏗 A common storage for web(localStorage), for RN(AsyncStorage), for mini-program(wx) or just memory cache(Node.js)
$ npm i -S tua-storage
# OR
$ yarn add tua-storage
tua-storage
是通过初始化时传入的 storageEngine
选项来区分不同的端。
tua-storage
是一款二次封装各个平台存储层接口,抹平各平台接口操作差异的库。采用 ES6+ 语法,将异步 api 使用 Promise 包裹,并采用 jest 进行了完整的单元测试。
已适配以下场景:
localStorage
作为存储对象object
)AsyncStorage
作为存储对象日常开发中,在不同的平台下由于有不同的存储层接口,所以往往导致同一份代码要写几份儿。
例如,小程序中保存数据要使用异步的 wx.setStorage
、wx.getStorage
或对应的同步方法;而在 web 端使用 localStorage 的话,则是同步的 setItem
、getItem
等方法;在 React-Native 的场景下,使用的又是 AsyncStorage
中异步的 setItem
、getItem
...
然而,经过 tua-storage
的二次封装,以上两个方法统一变成了:
save
load
由于异步方法没法变成同步方法,所以以上方法在所有场景下都异步返回 Promise
。
首先参阅文档 安装 将 tua-storage
安装到你的项目中,并正确地导入和初始化。
对于存储层来说,最基本的操作自然是保存(save)、读取(load)、删除(remove,删除单个)和清除(clear,清空全部)了。
import TuaStorage from 'tua-storage'
const tuaStorage = new TuaStorage({ ... })
// 返回一个 Promise
tuaStorage.save({ key: 'foo', data: { foo: 'bar' } })
.then(console.log)
.catch(console.error)
// 使用 async/await
async () => {
try {
const data = await tuaStorage.load({ key: 'foo' })
console.log(data)
} catch (e) {
console.error(e)
}
}
tuaStorage.remove('foo')
tuaStorage.clear()
然而,仅仅有这些我认为还不够...
想想平时我们是怎么使用存储层的
各位有没有看出其中麻烦的地方在哪儿?
数据同步部分的复杂度全留给了业务侧。
让我们回归这件事的【初心】:我仅仅需要获取这个数据!我不管它是来自存储层、来自接口数据、还是来自其他什么地方...
因此 tua-storage
在读取数据时很贴心地提供了一个 syncFn
参数,作为数据同步的函数,当请求的数据不存在或已过期时自动调用该函数。并且数据同步后默认会保存下来,这样下次再请求时存储层中就有数据了。
tuaStorage.load({
key: 'some data',
syncFn: ({ a }) => axios('some api url' + a),
// 以下参数会传到 syncFn 中
syncParams: { a: 'a' },
})
这么一来,存储层就和接口层对接起来了。业务侧再也不用手动调用 api 获取数据。
每次读取数据时如果都要手动传同步函数,实际编码时还是很麻烦...
不急,吃口药~
tua-storage
在初始化时能够传递一个叫做 syncFnMap
参数。顾名思义,这是一个将 key
和 syncFn
映射起来的对象。
const tuaStorage = new TuaStorage({
// ...
syncFnMap: {
'data one': () => axios('data one api'),
'data two': () => axios('data two api'),
// ...
},
})
// 不用手动传 syncFn 了
tuaStorage.load({ key: 'data one' })
其实手动编写每个 api 请求函数也是很繁琐的,要是有个根据配置自动生成请求函数的库就好了~
诶~,巧了么不是~。各位开发者老爷们 tua-api 了解一下~?
tua-storage
搭配 tua-api
之后会变成这样
import TuaStorage from 'tua-storage'
// 小程序端要引入 'tua-api/dist/mp'
import { getSyncFnMapByApis } from 'tua-api'
// 本地写好的各种接口配置
import * as apis from '@/apis'
const tuaStorage = new TuaStorage({
syncFnMap: getSyncFnMapByApis(apis),
})
Copyright (c) 2018-present, StEve Young
inspired by react-native-storage
FAQs
🏗 A common storage for web(localStorage), for RN(AsyncStorage), for mini-program(wx) or just memory cache(Node.js)
We found that tua-storage demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.
Security News
Biden's executive order pushes for AI-driven cybersecurity, software supply chain transparency, and stronger protections for federal and open source systems.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.