Будет ли компонент перерисовываться, если селекторы изменятся в третий раз?

Для этого кода выбора:

import { createSelector } from 'reselect'
import { FilterTypes } from '../constants'

export const selectFilterTodos = createSelector(
[getTodos, getFilters],
(todos, filters) => {
  switch(filters) {
    case FilterTypes.ALL:
        return todos;
    case FilterTypes.COMPLETED:
        return todos.filter((todo) => todo.completed)
    default:
        return todos
  }
}
)

Если состояние редукции изменится с состояния один на состояние два, а затем вернет состояние один, сколько раз будет выполняться второй параметр функции селектора? Может быть, дважды, и затем вы хотите, чтобы селектор повторно использовал запомненный результат, когда состояние два заявить один?


person JiangangXiong    schedule 14.09.2017    source источник


Ответы (1)


Reselect createSelector имеет размер запоминания по умолчанию 1. Итак, если вы вызываете селектор с помощью:

someSelector(state, "a");
someSelector(state, "b");
someSelector(state, "a");

Он повторно запустит «селектор выхода» 3 раза. В первый раз кэшированного значения нет, а во второй и третий раз входные данные отличаются, поэтому он не будет использовать кэшированное значение.

Если вам нужно изменить поведение запоминания, вы можете использовать createSelectorCreator для настройки сравнений и кэширования.

person markerikson    schedule 14.09.2017
comment
Большое спасибо. Я собираюсь обратиться к createSelectorCreator и прочитать еще несколько документов. - person JiangangXiong; 15.09.2017