如果选择器第三次更改,组件是否会重新渲染?
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
自定义比较和缓存。
对于这个选择器代码:
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
自定义比较和缓存。