javascript - 当只有一个父选择器时使用 createSelector 的好处

标签 javascript reactjs redux immutable.js reselect

假设我们有一个简单的 redux 存储:

{
  user: {
    age: 10
  }
}

我们有一个选择器来获取用户:

const getUser = state => state.get('user')     // suppose we used immutable.js

现在我们有两种方法来获取用户年龄:

  1. 使用 createSelector 并使用 getUser 作为父选择器:
const getAge = createSelector(
   getUser,
   user => user.get('age')
)
  • 直接使用现有选择器:
  • const getAge = state => getUser(state).get('age');
    

    问题:

    就表现、内存力等而言,哪一个更好

    另一个衍生问题:

    我在这里提出的例子非常简单,让我们考虑一下,当涉及到一个非常大型且复杂的redux存储时,两种方法的差异重要吗?

    最佳答案

    如果选择器的属性经常更改,则将它们保留在单独的选择器上是有意义的。至少在选择器通常对象作为一个整体发生变化的情况下,我更喜欢为用户创建一个选择器。

    举个例子,假设我们有一个对象:

    const profile = {
      name   : 'John',
      email,
      timezone,
      ...
      locale : 'en',
    }
    

    如果 <Translate>创建的组件与语言环境紧密耦合,但不与配置文件的其他部分(例如名称等)紧密耦合,然后是 getLocale() 的选择器这是有道理的(也是我们实现语言环境组件的方式)。

    另一方面,如果您有一个个人资料页面,用户可以在其中编辑各种字段,那么该页面很可能需要在进行更改时频繁重新呈现,因此仅拥有 getProfile() 是有意义的。该页面上的选择器。

    我们处理一个相当复杂且大型的 Redux 状态,例如,因为我们使用 currentUserId ,或userName在我们的网络应用程序中的各个地方,我们都有专门的选择器来利用内存功能。

    但是,对于测验或作业,我们使用单个选择器 getQuizContents()而不是其内部字段,因为我们知道大多数需要测验信息的组件不仅需要名称,还需要许多内部字段,例如日期、问题数量等。

    关于javascript - 当只有一个父选择器时使用 createSelector 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070882/

    相关文章:

    javascript - 如何在点击时更改div中的内容?

    javascript - 如何消除指针事件,但不消除触摸事件?

    javascript - 在 Google map 上放大和缩小时图像会自行复制

    reactjs - redux 操作类型具有可选的有效负载属性-typescript 在 reducer 内提示

    javascript - 使用 Redux Saga 并行获取数据

    react-native - React Native redux saga 产量不适用于第一个操作

    javascript - 如何在树的下方更新 redux 状态

    JavaScript 更改 ID 不起作用

    reactjs - 在表中显示页码

    reactjs - 如果使用 react with typescript,我可以将 tsx 扩展名用于测试文件吗