将 denormalizr 与 reselect 结合起来是一种好方法吗?

Is it a good approach to combining denormalizr with reselect?

我正在使用 reselect with denormalizr 来避免对每次更改进行非规范化,但我真的不知道这是否真的在改进某些东西。

import { createSelector } from 'reselect'
import { denormalize } from 'denormalizr'
import { challenge as schema } from './challenge.schema'

const getState = (state) => state

export const getChallenge = createSelector(getState, ({ entities, challenge }) => {
  return denormalize(entities.challenges[challenge.item], entities, schema)
})

export const getChallenges = createSelector(getState, ({ entities, challenge }) => {
  return challenge.items.map((id) => denormalize(entities.challenges[id], entities, schema))
})

规则通常是在您实际需要之前不要优化您的代码。如果您不知道是否需要优化,您可能处于过早优化的情况。

在这种情况下,如果它减慢了您的应用程序的速度,您可能应该这样做。问题通常是要知道这是否真的在减慢您的应用程序的速度。 您可以使用监控工具或简单地 comment/uncomment 代码并触发状态更改,然后查看您的应用是否在不重新选择的情况下保持响应。

您的实体图在每次更改时都会修改(针对当前对象或某些完全不同的对象)。重新选择 denornalize 的输出不会提高您的性能,因为它 returns 每次调用都是一个新对象。当任何实体发生变化时都会调用重新选择器,因此每次结果仍然是调用。