在 React UI 中使用规范化的 Redux 状态之前,是不是应该对其进行非规范化?

Posted

技术标签:

【中文标题】在 React UI 中使用规范化的 Redux 状态之前,是不是应该对其进行非规范化?【英文标题】:Should you denormalize normalized Redux state before using it in React UI?在 React UI 中使用规范化的 Redux 状态之前,是否应该对其进行非规范化? 【发布时间】:2021-05-14 11:34:05 【问题描述】:

我最近开始使用 Normalizr 库来规范化 Redux 状态的 API 响应,但仍有一些部分让我感到困惑。

当使用标准化的 Redux 状态进行 UI 渲染时,将其传递给组件需要额外的 id props,而仅定义 props 会变得更加复杂

           postIds.map((postId) => (
            <Post
              postText=entities.posts[postId].body 
              commentIds=entities.posts[postId].comments
              postComments=entities.comments
              postAuthor=
                entities.users[entities.posts[postId].author.username]
              
            />
          ))

在 React UI 中使用数据之前,是否应该对数据进行非规范化处理? 或者这是一个正常的模式?如果是这样,有什么方法可以简化它?

【问题讨论】:

【参考方案1】:

是的,当使用标准化状态时,您通常会only pass an item ID to the child component, and let it look up its own data using that ID prop:

const TodoListItem = ( id ) => 
  // Call our `selectTodoById` with the state _and_ the ID value
  const todo = useSelector(state => selectTodoById(state, id))
  const  text, completed, color  = todo


我还建议通读:

关于标准化状态的 "Redux Fundamentals" 和 "Redux Essentials" 教程部分 Redux Toolkit usage guide on working with normalized state。

【讨论】:

以上是关于在 React UI 中使用规范化的 Redux 状态之前,是不是应该对其进行非规范化?的主要内容,如果未能解决你的问题,请参考以下文章

[React 实战系列] 注册功能的实现

在 React / Redux 中了解 UI 何时准备就绪

如何使用react-redux将redux商店中封装的ui状态映射到道具?

react + redux + normalizer:如何发送条件非规范化数据?

手写一个React-Redux,玩转React的Context API

React、Redux、React-Router - 卡在安装 material-ui