Разница между createSelector (...) и () => createSelector (...) - PullRequest
0 голосов
/ 13 февраля 2019

Может кто-нибудь сказать мне разницу между этими двумя типами использования реселекторов, и скажите мне, когда использовать какой?

// First type of selector, without arrow function
export const selectMyValue = createSelector(
  rootSelector,
  state => state.get('someValue'),
)

// Second type of selector, with arrow function
export const selectMyValue = () => createSelector(
  rootSelector,
  state => state.get('someValue'),
)

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

первый - это простой селектор , непосредственно потребляемый вашим приложением, например:

selectMyValue(state);

второй * - это фабрика селекторов , другими словами, функция, которая возвращает абсолютно новый экземпляр селектора при каждом вызове.

const selectMyValue1 = selectMyValueFactory();
const selectMyValue2 = selectMyValueFactory();

// Calls to the following selectors won't invalidate each other's cache
selectMyValue1(state);
selectMyValue2(state);
0 голосов
/ 13 февраля 2019

разница между этими двумя типами

В первом примере присваивается selectMyValue тому, что createSelector возвращается.Поэтому вы можете вызывать его с вашим состоянием:

const value = selectMyValue(someState)

В то время как второй пример возвращает функцию, которая обернута createSelector.Но createSelector еще не вызван.Вы будете использовать эту функцию, чтобы вызвать ее позже:

const wrapped = selectMyValue();
const value = wrapped(someState);

или один вкладыш:

const value = selectMyValue()(someState);

когда и какие использовать?

Вы, вероятно, будете использовать первый в большинстве случаев.Однако может возникнуть ситуация, когда вам нужно предоставить некоторые аргументы для вашей функции-оболочки.

Например:

export const selectMyValue = (value) => createSelector(
  rootSelector,
  state => state[value] // just an example
)

Здесь ваша оболочка принимает аргумент с именем value.Вы можете вызвать его как утилиту для извлечения различных частей состояния:

const valueFromState = selectMyValue('someValue')(state);
const someOtherValueFromState = selectMyValue('someOtherValue')(state);
...