我了解'reselect'背后的记忆概念,并正在使用它构成我的Redux选择器,但是我不确定createSelector
如何“知道”组件选择器的数据何时更改以及是否包含其他选择器这些“子选择器”中的函数调用会干扰createSelector
的记忆。
问题在于,在“子选择器”(即我要传递给createSelector
的函数中)中,我需要执行一些基本检查,以确保JSON数据树的部分不是{{ 1}}(为此,我使用了unedefined
库),还通过名称选择 JSON数据树的一部分。也就是说,在“子选择器” ramda
中,我正在调用其他模块中的getParksData
和existsAt
。 (我知道在下面的示例中,我仅由一个“子选择器”组成;稍后将添加其他子选择器)。
当我调用其他函数时,我仍然保持nameToBlockData
的所有备注好处吗?我需要以某种方式记住那些功能吗?感谢您提供任何信息!
createSelector
答案 0 :(得分:1)
createSelector
将计算所有输入选择器。如果它们是使用createSelector
创建的,它们也会被记录下来。
备忘录仅检查输入的参数,因此只要您的状态(或子状态)没有变化,您仍然会受益于备忘录。
注意,我两次致电barSelector
,但getFoo
仅执行一次
const {
createSelector
} = Reselect
const getFoo = (thing) => {
console.log('getFoo')
return thing.foo
}
const state = {
foo: {
bar: 1
},
}
const fooSelector = state => getFoo(state)
const barSelector = createSelector(
fooSelector,
foo => foo.bar
)
console.log(barSelector(state))
console.log(barSelector(state))
<script src="https://cdnjs.cloudflare.com/ajax/libs/reselect/4.0.0/reselect.min.js"></script>