javascript - 协助从缓存中获取数据
问题描述
这个屏幕有点工作。第一次打开屏幕时,只显示启动画面。返回然后再次打开屏幕然后显示数据。我需要帮助从缓存中获取数据并在屏幕第一次打开时显示它。
我需要屏幕显示启动画面,同时从缓存中保存和检索数据,然后在您第一次打开屏幕时显示实际数据。
const [dataList1, setDataList1] = useState([]);
const [cacheData, setCacheData] = useState(null);
// Function to get data from cache
const getDataFromCache = async () => {
const data = await cache.get(cacheKeys.BENEFITS_CACHE_KEY);
setCacheData(data);
}
// Get data from cache
useEffect(() => {
getDataFromCache();
}, [])
// Store data to cache
useEffect(() => {
if (dataList1.length > 1) cache.store(cacheKeys.BENEFITS_CACHE_KEY, dataList1);
}, [dataList1]);
useEffect(() => {
var benefitsArr = [];
var benefitsDetailsArr = [];
const unsubscribe = auth.onAuthStateChanged((authUser) => {
if (authUser) {
db
.collection('members')
.doc(authUser.uid)
.get()
.then(user => {
benefitsArr.push(...user.data().benefits);
db
.collection('benefits')
.get()
.then(snapshots => {
snapshots.forEach(doc => {
if (benefitsArr.includes(doc.id))
{
benefitsDetailsArr.push(doc.data());
}
})
// Save results to a useState constant
setDataList1(dataList1 => ([...dataList1, ...benefitsDetailsArr]));
})
.catch(error => console.log(error))
})
.catch(error => console.log(error))
}
})
return unsubscribe;
}, []);
if (!cacheData) return <SplashScreen />
解决方案
是因为这条线
if (!cacheData) return <SplashScreen />
你应该创建一个显示/隐藏状态然后做
if (show) return <SplashScreen />
然后在你的功能
const getDataFromCache = async () => {
const data = await cache.get(cacheKeys.BENEFITS_CACHE_KEY);
setCacheData(data);
setShow(false) // <-- hide the splash
}
推荐阅读
- python - 用介于两者之间的日期填写开始/结束日期列表
- javascript - 更改任何元素的悬停样式而不更改父项的样式
- mongodb - 我什么时候可以在命令行中使用命令“mongod”?
- asp.net-core - 从另一个项目中读取配置 - Log4Net ASP.NET Core 3.1
- php - Gulp 和 browserSync 配置与 MAMP:卡在重新加载浏览器
- shell - 当我使用 -w 而不是没有它时,为什么 grep 会返回匹配项?
- docker - GitLab 管道未执行 docker 映像的脚本部分中的命令
- javascript - 循环遍历函数对象并为对象中的每个函数添加一个新方法
- firebase - 如何从 Firebase 存储中的所有文件中删除下载 URL 选项?
- awk - 打印一个文件的行数和另一个文件的总数