javascript - React + Firebase - 处理非规范化数据
问题描述
我正在从我的数据库中读取文档,其中包含非规范化数据。我使用这些数据来呈现一个可点击的 GUI 组件“UserListItem”。
当用户按下此组件时,它将导航到屏幕“配置文件”。
因此,例如,如果在获取非规范化文档后,我会得到以下信息:
{
userData: { // Denormalized data
id,
avatar,
name,
username,
isCelebrity
},
... other stuff
}
用户单击时导航到的“个人资料”屏幕需要以下用户字段:
userData = {
/* Included in denormalization */
id,
avatar,
name,
username,
isCelebrity,
/* Not included in denormalization */
totalFollowers,
totalFollowing,
status,
premium,
}
我该如何处理这种情况?我的意思是,典型的策略是什么?
我曾考虑在配置文件屏幕中执行此操作:
useEffect(() => {
if(!isUserDataComplete(userData)) { // Check that the userData object contains all the required fields
const newUserData = getUserData(userData.id); // DB Fetch
users.updateData(newUserData); // Updating the user data in our context
}
}, []);
但不确定这是否是一个好的和“干净”的方法。
还有,这种情况有名字吗?阅读更多关于它的信息。
解决方案
但不确定这是否是一个好的和“干净”的方法。
这在很大程度上取决于您的功能要求、访问权限、更新频率以及未“包含在非规范化中”的数据量。
如果:
- 的所有授权读者都
UserList
可以阅读相应的Profiles
; - 从用户打开到
UserList
他/她打开未“包含在非规范化中”的数据Profile
之一(如果我正确理解,请单击一行UserList
)之间不会改变; - 这些未“包含在非规范化中”的数据并不是很重(我想它是数字,可能是代码和
totalFollowers
布尔值);totalFollowing
status
premium
然后您可能应该在“非规范化”中包含未包含的数据:您将保存一些读取,因为打开 a 时要显示的数据Profile
已经被获取。
另一方面,如果上述条件之一不成立,那么您可能应该保持原样并在用户打开时获取未“包含在非规范化中”的数据Profile
推荐阅读
- java - 为什么会引发异常?
- node.js - 为生产构建我的电子 vue 应用程序后出现白屏
- prisma - Prisma2 无法转换为“timestamptz”类型的 Postgres 值或从其转换
- r - 使用数据框的独特组合的折线图
- tfs - TFS 2017 - 无法修改当前迭代板
- iis - 如何使用 Microsoft Active Directory 证书服务更新证书
- mongodb - 如何在 MongoDB 中编写查询以代表 MongoDB 中的自定义 ID 搜索两个日期之间的数据
- javascript - 我如何在反应本机应用程序中保留数据?
- frequency - iCalendar 开放时间
- html - Outlook 电子邮件签名和超链接线颜色