当用createSelector
创建一个可以接收额外参数的新选择器时,需要在外部选择器输入(在本例中为categoryName
)旁边添加相应的状态部分(items)
。为什么需要这样做?
此外,当输入(_, categoryName) => categoryName
时,它以同样的方式工作,第一个参数有什么用?
print of items slice
print of main component的
[items,(categoryName)=> categoryName],
但这行不通
1条答案
按热度按时间wfsdck301#
.有必要在外部选择器输入旁边添加相应的状态部分(项).为什么有必要这样做?
这是必要的,因为所有的选择器函数都传递给当前Redux存储,例如状态,作为第一个,通常是唯一的参数。
此外,当输入
(_, categoryName) => categoryName
时,它以同样的方式工作,第一个参数有什么用?它以同样的方式工作,因为
"_"
* 只是 * 一个有效的JavaScript标识符,就像你使用(items, categoryName) => categoryName
时的"items"
一样。通常我们将第一个参数命名为state
,例如(state, categoryName) => categoryName
,因为这是它实际上是什么。在这种情况下,你仍然需要将第一个参数命名为 something,这样你就可以真正访问第二个参数,你想在计算选择器函数中使用的“extra”参数。[items, (categoryName) => categoryName],
个但这行不通
这不起作用,因为你已经将传递的Redux状态命名为
categoryName
,并且没有使用传递的额外参数。在选择器函数中,categoryName
将只是整个状态值。由于state参数实际上是一个不被引用的“丢弃”变量,因此有一个命名约定,使用
"_"
来表示一个命名变量是故意“未使用”的,或者是一个“内部实现细节”,不打算被使用或引用。字符串