React + Firebase - 处理非规范化数据

React + Firebase - Handle denormalized data

我正在从我的数据库中读取文档,其中包含非规范化数据。我使用此数据呈现可点击的 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
   }
}, []);

但不确定这是否是一种好的“干净”方法。

另外,这种情况有名字吗?阅读更多相关信息。

But not sure if this is a good and "clean" approach.

这在很大程度上取决于您的功能要求、访问权限、更新频率以及未“包含在反规范化中”的数据量。

如果:

  1. 所有UserList的授权读者可以阅读对应的Profiles;
  2. 在用户打开 UserList 和 he/she 打开其中一个 Profile 之间(如果我理解正确,请单击 UserList 行)未“包含在反规范化中”的数据不会更改;
  3. 这个没有“包含在反规范化”中的数据并不是很重(我想象totalFollowerstotalFollowing是数字,status可能是代码而premium 一个布尔值);

那么您可能应该在“反规范化”中包含未包含的数据:您将保存一些读取,因为打开 Profile 时要显示的数据已经被获取。

另一方面,如果上述条件之一不成立,那么当用户打开 Profile