我是 React 和 Ionic 以及一般 JS 的新手,所以我按照教程并尝试将其调整到我的用例。
我想要实现的是以下内容:
- 应用加载时从本地存储读取 JSON 字符串
- 应用退出时将(较新的)JSON 写回存储
我现在拥有的是(严重截断):
探索容器.tsx
import { useStore } from '../hooks/useFilesystem';
var vars = { intervaltime : 50000 /* ... */ };
const ExploreContainer: React.FC<ContainerProps> = ({ name }) => {
const { writeVars, readVars } = useStore();
writeVars();
if ( vars.intervaltime == 50000 ) {
vars = JSON.parse( readVars() );
}
console.log( vars );
// ...
使用文件系统.ts
import { useStorage } from '@ionic/react-hooks/storage';
import { vars } from '../components/ExploreContainer';
const FILESTORAGE = "files";
export function useStore() {
const { get, set } = useStorage();
const writeVars = async () => {
set(FILESTORAGE, JSON.stringify(vars));
};
const readVars = function() {
get(FILESTORAGE).then((value) => { return value });
}
return {
writeVars,
readVars
};
};
现在的问题:readVars()
中的调用React.FC
不等待get
自定义钩子中的 。当我在读取时记录输出时,我发现这是一个未实现的承诺。自然,这会提示JSON.parse()
抛出错误,因为它可以解析的字符串还没有被读取。
我尝试在其中声明一个异步函数,React.FC
以便等待它,但函数声明是不可能的,因为 FC 始终处于严格模式。我还尝试在之前声明异步函数,React.FC
但这也不起作用,因为如果我正确解释了错误消息,我就不能在 FC 之外调用钩子。在自定义钩子中,我以前有一个 await 语句而不是.then
,但行为是相同的。
如果有一种更简单的方法可以将 JSON 字符串读取和写入某种形式的持久性(!)存储,我会很高兴了解它!