用户可以将项目设置为收藏夹,当按下星号图标时,他们会设置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的变量。)您首选的处理方式是使用收藏夹功能,使用收藏夹列表是否在正确的轨道上?
答案 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}
/>