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

Will the component re-rende if selectors change third time?

对于这个选择器代码:

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状态从状态一变成状态二然后return状态一,selector的第二个函数参数运行会出现多少次? 可能是两次,然后当state 2变成state one时你会希望selector重用记忆的结果吗?

Reselect 的 createSelector 的默认记忆大小为 1。因此,如果您调用选择器:

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

它将重新运行 "output selector" 3 次。第一次没有缓存值,第二次和第三次输入不同,所以不会使用缓存值。

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