如果选择器第三次更改,组件是否会重新呈现?

时间:2017-09-14 07:32:46

标签: reactjs redux reselect

对于此选择器代码:

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

如果redux状态从状态1变为状态2然后返回状态1,那么选择器的第二个函数参数会运行多少次? 也许它是两次,然后你会希望选择器在状态二到状态一时重用记忆结果吗?

1 个答案:

答案 0 :(得分:1)

重新选择createSelector的默认记忆大小为1.因此,如果您使用以下方式调用选择器:

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

它会重新运行“输出选择器”3次。第一次没有缓存值,第二次和第三次输入不同,所以它不会使用缓存的值。

如果您需要更改记忆行为,可以使用createSelectorCreator自定义比较和缓存。