reactjs - 将列表更改保存到 React 中的本地存储
问题描述
我有一个被调用列表的集合allLists
,当我进行更改(例如添加新列表或更新现有列表)时,allLists
我希望将更改保存到本地存储中。我遇到了这个问题,当我刷新它似乎不起作用。
自定义本地存储挂钩:
export function useLocalStorage(key, defaultValue, mapper = (str) => str) {
const getInitialValue = () =>
localStorage.getItem(key) !== null
? mapper(localStorage.getItem(key))
: defaultValue;
const [value, setValue] = useState(getInitialValue);
const setAndStoreValue = (newValue) => {
if (newValue !== "") {
setValue(newValue);
localStorage.setItem(key, newValue);
}
};
return [value, setAndStoreValue];
}
我如何使用保存到 allList 到本地存储
const [allLists, setAllLists] = useLocalStorage('allLists', [initialLists]);
Codesandbox 示例: 链接
解决方案
由于缺少有效的and ,保存和从中获取值localStorage
不起作用。您可以更新您的钩子以具有默认( ) 和( ) 的实现,如下所示:-serializer
deserializer
useLocalStorage
serializer
JSON.stringify
deserializer
JSON.parse
export function useLocalStorage(key, defaultValue, {serializer = JSON.stringify,deserializer=JSON.parse}={}) {
const getInitialValue = () =>
localStorage.getItem(key) !== null
? deserializer(localStorage.getItem(key))
: defaultValue;
const [value, setValue] = useState(getInitialValue);
const setAndStoreValue = (newValue) => {
if (newValue !== "") {
setValue(newValue);
localStorage.setItem(key, serializer(newValue));
}
};
return [value, setAndStoreValue];
}
分叉的 Codesandbox :-
注意:-您可能需要额外的逻辑来处理尝试使用字符串而不是字符串化对象进行反序列JSON.parse(..)
化的情况,因为这会导致错误。您可以将自定义函数传递给您的钩子,为您处理所有这些。
推荐阅读
- swagger - 服务堆栈 (4.5.0) Swagger UI
- go - go get 命令做缓存吗?
- python - Paypal IPN notify_url 未在 django 项目中调用
- android - Firebase 快速入门分析无法解析“:app@debug/compileClasspath”的依赖关系:无法解析项目:内部:lintchecks
- mapstruct - 为所有其他映射注册映射
- ios - App Store Connect 操作错误:路径中缺少 CFBundleIdentifier
- android - webrtc 看不到远程视频但可以听到音频
- centos - 无法映射名称 UUID | 起搏器 | linux集群
- python - sympy 中的其他简化
- redirect - Identity Server 4 - 取消重定向到登录并返回 401