对于此选择器代码:
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,那么选择器的第二个函数参数会运行多少次? 也许它是两次,然后你会希望选择器在状态二到状态一时重用记忆结果吗?
答案 0 :(得分:1)
重新选择createSelector
的默认记忆大小为1.因此,如果您使用以下方式调用选择器:
someSelector(state, "a");
someSelector(state, "b");
someSelector(state, "a");
它会重新运行“输出选择器”3次。第一次没有缓存值,第二次和第三次输入不同,所以它不会使用缓存的值。
如果您需要更改记忆行为,可以使用createSelectorCreator
自定义比较和缓存。