首页 > 解决方案 > 查询收藏列表的最佳方式

问题描述

用户可以将项目设置为收藏,当按下他们设置的 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 列表中并且设置为 true,则图标应该与 false 值不同。我发现我无法使用变量查看 Redux 状态(例如 state.items.userfavorites.ItemID === true (其中 ItemID 是打开的项目 ID 的变量。)您首选的方式是什么使用收藏夹功能,我是否在使用收藏夹列表的正确轨道上?

标签: firebasereact-nativeredux

解决方案


所以我昨天得到了这个工作。我的 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}
            />

推荐阅读