response-redux - в документации по перехватчикам, почему параметр селектора помещается в отдельный селектор параметров c при вызове createSelector ()? - PullRequest
1 голос
/ 05 февраля 2020

В примерах useSelector для перехватчика документации реактивного редукса есть фрагмент кода:

const selectNumOfTodosWithIsDoneValue = createSelector(
  state => state.todos,
  (_, isDone) => isDone,
  (todos, isDone) => todos.filter(todo => todo.isDone === isDone).length
)

Как мы видим, isDone - это параметр selectNumOfTodosWithIsDoneValue. Но почему он помещается в отдельный селектор параметров c, т.е. (_, isDone) => isDone? Могу я написать следующее?

const selectNumOfTodosWithIsDoneValue = createSelector(
  (state, isDone) => state.todos.filter(todo => todo.isDone === isDone),
  filteredTodos => filteredTodos.length
)

В чем разница между двумя подходами?

1 Ответ

2 голосов
/ 05 февраля 2020

Во втором примере всегда вызовет полный пересчет, потому что filter() всегда возвращает новую ссылку на массив.

Хотя я не особенно доволен текущий (первый) пример, он запоминает, что он пересчитает длину только в случае изменения state.todos или isDone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...