redux 为什么把输入选择器,不使用的,在调试器的外部调试器?

gz5pxeao  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(111)

当用createSelector创建一个可以接收额外参数的新选择器时,需要在外部选择器输入(在本例中为categoryName)旁边添加相应的状态部分(items)。为什么需要这样做?
此外,当输入(_, categoryName) => categoryName时,它以同样的方式工作,第一个参数有什么用?
print of items slice
print of main component
[items,(categoryName)=> categoryName],
但这行不通

wfsdck30

wfsdck301#

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

const items = state => state.items;

createSelector(
  [
    items,                            // <-- selects items state
    (_, categoryName) => categoryName // <-- "selects" categoryName
  ],
  (items, categoryName) => {
    // logic to compute a value using the items state
    // and passed category name value
  },
);

字符串

相关问题