firebase - 查询收藏列表的最佳方式
问题描述
用户可以将项目设置为收藏,当按下他们设置的 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 的变量。)您首选的方式是什么使用收藏夹功能,我是否在使用收藏夹列表的正确轨道上?
解决方案
所以我昨天得到了这个工作。我的 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}
/>
推荐阅读
- amazon-s3 - 将大小为 8TB 的本地 Oracle 数据库迁移到 AWS RDS Oracle
- javascript - Mongoose 不验证嵌套数组模式
- windows-10 - STM32CubeIDE 和 OpenOCD:错误:等待目标停止时超时
- reactjs - React 渲染何时发生
- javascript - 防止将对象添加到已存在的数组中
- blazor - 如何安装 blazorhybrid 项目模板?
- java - 变量可能没有使用输入数据初始化
- python - psycopg2 文件夹压缩到 python venv lambda 函数中
- typescript - 防止函数调用中的类型冲突
- swift - 如何编写重启应用的方法或函数