2

我将reselectdenormalizr一起使用,以避免对每次更改进行非规范化,但我真的不知道这是否真的在改进某些东西。

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))
})
4

2 回答 2

1

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

于 2019-01-21T08:26:01.400 回答
-1

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

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

于 2017-04-11T18:37:38.727 回答