【问题标题】:Assist in getting data from cache协助从缓存中获取数据
【发布时间】:2021-04-11 08:01:20
【问题描述】:

这个屏幕有点工作。第一次打开屏幕时,只显示启动画面。返回然后再次打开屏幕然后显示数据。 我需要帮助从缓存中获取数据并在屏幕第一次打开时显示它。

我需要屏幕在保存和从缓存中检索数据时显示启动画面,然后在您第一次打开屏幕时显示实际数据。

    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 />

【问题讨论】:

    标签: javascript react-native google-cloud-firestore firebase-authentication


    【解决方案1】:

    是因为这条线

    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
    }
    

    【讨论】:

    • 这行得通。不过,再也看不到启动画面了。可能需要降低网络速度才能看到缓慢的网络行为。非常感谢!
    • 我不确定你使用的是什么启动画面,但你应该看看 react-native-splash-screen 之类的包
    猜你喜欢
    • 2021-08-24
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 2023-04-03
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多