# 快速开始
Soft Storage 提供三种方式来管理存储:
- 结合 Vue 3中的
ref
API - 结合 React中的
useState
API - 在任何支持
cjs
模块或esm
模块的项目中独立使用
此外,如果您只想使用 Web Storage 的浅层模块化封装,您可以直接转到 直接使用 部分。
注意
请注意,永远不要使用interface
来为 Soft Storage 定义类型。请使用type
取代之。点击 常见问题 > 关于 Interface 查看更多。
# Vue 3 用户 vue >= 3.1.0
# 安装
- npm
- yarn
- pnpm
npm install @soft-storage/vue-hooks
# 创建存储模块
在您的项目中随意创建一个文件:
// storage.ts
import { createLocalStorage } from '@soft-storage/vue-hooks';
type UserInfo = {
token?: string;
hasSigned: boolean;
};
export const storage = createLocalStorage<UserInfo>({
// 存储键
storageModuleKey: 'user_info',
// 用于初始化
initial: {
hasSigned: false, // 非空属性必须初始化
// 可选属性不能初始化
},
});
# 在 Vue 组件中使用
<script setup lang="ts">
import { onMounted } from 'vue';
import { getUserInfo } from '@/api'; // 假设您有一个获取用户信息的异步函数
import { useStorage } from '@soft-storage/vue-hooks';
import { storage } from './storage';
/* 在Typescript的帮助下,您可以轻松地解构hook的返回值 */
const {
refs: { token, hasSigned },
resetters: { resetToken, resetHasSigned },
checkers: { containsToken, containsHasSigned },
} = useStorage(storage);
onMounted(() => {
getUserInfo().then(res => {
token.value = res.token; // vue响应式变量(组合式API)
hasSigned.value = true; // 同上
});
});
const onSignOut = () => {
resetToken(); // 重置 token 的值
resetHasSigned(); // 重置 hasSigned 的值
};
</script>
<template>
<div>Contains token: {{ containsToken() }}</div>
<div>Contains hasSigned: {{ containsHasSigned() }}</div>
<button @click="onSignOut">Sign out</button>
</template>
# React 用户 react >= 16.8.0
# 安装
- npm
- yarn
- pnpm
npm install @soft-storage/react-hooks
# 创建存储模块
在您的项目中随意创建一个文件:
// storage.ts
import { createSessionStorage } from '@soft-storage/react-hooks';
type UserInfo = {
token?: string;
hasSigned: boolean;
};
export const storage = createSessionStorage<UserInfo>({
// 存储键
storageModuleKey: 'user_info',
// 用于初始化
initial: {
hasSigned: false, // 非空属性必须初始化
// 可选属性不能初始化
},
});
# 在函数式组件中使用
import React, { useEffect } from 'react';
import { getUserInfo } from '@/api'; // 假设您有一个获取用户信息的异步函数
import { useStorage } from '@soft-storage/react-hooks';
import { storage } from './storage';
function UserInfoFC() {
/* 在Typescript的帮助下,您可以轻松地解构hook的返回值 */
const {
tokenState: { token, setToken, resetToken, containsToken },
hasSignedState: { hasSigned, setHasSigned, resetHasSigned, containsHasSigned },
} = useStorage(storage);
useEffect(() => {
getUserInfo().then(res => {
setToken(res.token);
setHasSigned(true);
});
}, []);
const onSignOut = () => {
resetToken(); // 重置 token 的值
resetHasSigned(); // 重置 hasSigned 的值
};
return (
<>
<div>Contains token: {containsToken()}</div>
<div>Contains hasSigned: {containsHasSigned()}</div>
<button onClick={onSignOut}>Sign out</button>
</>
);
}
export default UserInfoFC;
# 独立使用
# 安装
- npm
- yarn
- pnpm
npm install @soft-storage/hooks
# 创建存储模块
在您的项目中随意创建一个文件:
// storage.ts
import { createSessionStorage } from '@soft-storage/hooks';
type UserInfo = {
token?: string;
hasSigned: boolean;
};
export const storage = createSessionStorage<UserInfo>({
// 存储键
storageModuleKey: 'user_info',
// 用于初始化
initial: {
hasSigned: false, // 非空属性必须初始化
// 可选属性不能初始化
},
});
# 在脚本中使用
import { getUserInfo } from '@/api'; // 假设您有一个获取用户信息的异步函数
import { useStorage } from '@soft-storage/hooks';
import { storage } from './storage';
const { token, hasSigned } = useStorage(storage);
(() => {
getUserInfo().then(res => {
token.set(res.token);
hasSigned.set(true);
console.log(hasSigned.get()); // true
});
})();
const onSignOut = () => {
token.reset(); // 将值设置为初始值。若未提供初始值,将设为 undefined
hasSigned.reset();
console.log(token.get(), token.exist()); // undefined, false
console.log(hasSigned.get(), hasSigned.exist()); // false, true
};
# 关于 remove() API
提示
remove()
是不受支持的 API。点击 常见问题 > 关于 remove() 和 clear() 函数 了解更多。
# 直接使用
# 安装
- npm
- yarn
- pnpm
npm install @soft-storage/core
# 创建一个存储模块
// storage.ts
type UserInfo = {
token?: string;
hasSigned: boolean;
};
const storageModule = new StorageModule<UserInfo>('user_info', StorageType.SESSION);
const helper = storageModule.getHelper();
if (!helper.getExistence()) {
// 这里的初始化是随心所欲的,没有限制
helper.setModule({
token: '',
hasSigned: false,
});
}
export { storageModule };
# 在脚本中使用
import { StorageModule, StorageType } from '@soft-storage/core';
import { getUserInfo } from '@/api'; // 假设您有一个获取用户信息的异步函数
import { storageModule } from './storage.ts';
type UserInfo = {
token?: string;
hasSigned: boolean;
};
(() => {
getUserInfo().then(res => {
storageModule.setItem('token', res.token);
storageModule.setItem('hasSigned', true);
console.log(storageModule.getItem('hasSigned')); // true
console.log(storageModule.contains('token')); // true
});
})();
const onSignOut = () => {
storageModule.removeItem('token');
storageModule.setItem('hasSigned', false);
console.log(storageModule.getItem('token')); // undefined
console.log(storageModule.size()); // 1
// 或者
storageModule.clear();
console.log(storageModule.size()); // 0
};
# Next
现在,您可以享受到 TypeScript 带来的类型提示了!