Javascript 只有一个父选择器时使用createSelector的好处

Javascript 只有一个父选择器时使用createSelector的好处,javascript,reactjs,redux,immutable.js,reselect,Javascript,Reactjs,Redux,Immutable.js,Reselect,假设我们有一个简单的redux存储: { user: { age: 10 } } 我们有一个选择器来获取用户: const getUser = state => state.get('user') // suppose we used immutable.js 现在,我们有两种方法来获取用户年龄: 使用createSelector并使用getUser作为父选择器: 直接使用现有选择器: 问题: 在性能、记忆等方面,哪一个更好。 另一个衍生问题: 我在这里提出的例

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

{
  user: {
    age: 10
  }
}
我们有一个选择器来获取用户:

const getUser = state => state.get('user')     // suppose we used immutable.js
现在,我们有两种方法来获取用户年龄:

  • 使用
    createSelector
    并使用getUser作为父选择器:
  • 直接使用现有选择器:
  • 问题:

    在性能、记忆等方面,哪一个更好。

    另一个衍生问题:


    我在这里提出的例子很简单,让我们考虑一下,当一个非常强的大型复杂的< /强> ReDux商店时,两种方法的区别是否重要?

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

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

    const profile = {
      name   : 'John',
      email,
      timezone,
      ...
      locale : 'en',
    }
    
    如果创建的
    组件与区域设置紧密耦合,但不与配置文件的其他部分(如名称等)紧密耦合,那么
    getLocale()
    的选择器就有意义(这也是我们实现区域设置组件的方式)

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

    我们处理相当复杂和庞大的Redux状态,例如,因为我们在web应用程序中到处使用
    currentUserId
    userName
    ,所以我们有专门的选择器来利用记忆功能

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

    const getAge = state => getUser(state).get('age');
    
    const profile = {
      name   : 'John',
      email,
      timezone,
      ...
      locale : 'en',
    }