查询收藏夹列表的最佳方法

时间:2020-09-13 16:07:39

标签: firebase react-native redux

用户可以将项目设置为收藏夹,当按下星号图标时,他们会设置Redux函数,该功能会将其设置为本地收藏夹,并将其保存在Firebase数据库中;

-Userfavorites
--userID
---ItemID: true (or false if the disable the favorite later on)

这一切都很好,但是我现在想弄清楚从Firebase检索信息时如何最好地处理它。打开应用程序后,将检索所有项目,就像上面的UserFavorites列表一样。

在Redux状态下处理此问题的最佳方法是什么?

Component: {ItemID1: true, ItemID2: true, ItemID3: false}
                    or
Array: 0.[ItemID1: true]1.[ItemID2: true]2.[ItemID3: false]

打开项目时,我想交叉检查已打开的itemID,如果Redux的UserFavorites列表中存在该项目ID,并且设置为true,则图标应该与false值有所不同。 我发现我无法使用变量查看Redux状态(例如state.items.userfavorites.ItemID === true(其中ItemID是打开的Item ID的变量。)您首选的处理方式是使用收藏夹功能,使用收藏夹列表是否在正确的轨道上?

1 个答案:

答案 0 :(得分:0)

所以我昨天做了这个工作。我的Firebase数据库仍然如上。以下是Redux动作。我用这个创建一个数组,其中每个条目都带有favID前缀,后跟键,在我的情况下是itemID。

        const resData = await response.json();
        console.log('fetchFavorites action response data' , resData)
        const result = Object.entries(resData).map(([key, val]) => ({
            ['favID']: key
                        }));
                        console.log('results' , result)
        
        dispatch({
            type: FETCH_FAVORITES,
            userFavorites: result
        });

然后在详细信息页面上,我使用以下代码查看currentItemIsFavorite。

const currentItemIsFavorite = useSelector(state => 
        state.onlineItems.favoriteItems.some(item => item.favID === itemId)
        );

在此之后生成正确的图标;

                <Item
                title="Favorite star"
                iconName={isFavorite  ? 'ios-star' : 'ios-star-outline'}
                color='gold'
                onPress={toggleFavorite}
            />