我现在正在学习Redux,并浏览了教程信息.他们在Reading State from the Store with useSelector区有一张纸条,上面写着:
UseSelector使用STRICT=引用比较其结果 比较,因此组件将在 Select 器的任何时候重新呈现 结果是一个新的参考!这意味着如果您创建一个新的 在 Select 器中引用并返回它,则组件可以 在每次调度操作时重新呈现,即使数据 真的没什么不同.
它继续给出这个函数作为一个坏例子,说明你可能会传递给你的useSelector()
// Bad: always returning a new reference
const selectTodoDescriptions = state => {
// This creates a new array reference!
return state.todos.map(todo => todo.text)
}
在后面的Selecting Data in List Items by ID节中,他们用这一点作为他们对这个主题的解释的一部分:
const selectTodoIds = state => state.todos.map(todo => todo.id)
const todoIds = useSelector(selectTodoIds)
这与第一个"坏"代码示例有什么不同?写这篇文章的正确方式是什么?该警告是否建议您不要在useSelector()
挂钩中使用任何数组?我真的不理解它是什么意思,当它说一个操作可以被调度,不改变数据,但以某种方式影响 Select 器.
Edit:
正如有人在 comments 中指出的,如果你继续阅读它,你会解释他们为什么这样做/为什么不做这样的事情,但是,有人能解释一下我写的最后一个小问题/语句吗?What does it mean exactly when it says an action could be dispatched that doesn't change the data but still changes the reference, causing re-renders?我得到了map()
函数可以返回一个包含相同数据的新数组,从而成为一个新的引用,但我想不出有哪种情况会被调度,而不会改变任何数据,但仍然以某种方式触及 Select 器的状态.如果该操作不影响 Select 器的特定状态,那么为什么要重新呈现呢?我需要一个不同于教程中的示例,因为它不适合我.