react-redux useSelector 钩子不允许将道具直接传递给选择器

hal*_*y9k 6 javascript reactjs redux react-redux react-hooks

我刚开始打新useSelector中的钩react-redux

我总是像这样直接将 props 传递给我的选择器:

mapStateToProps(state, ownProps) {
   return {
      user: userSelector(state, ownProps.userId)
   }
}
Run Code Online (Sandbox Code Playgroud)

将道具直接传递给选择器是否被视为反模式?

如果“否”,那么我怎样才能做到这一点useSelector

如果“是”,那么实现选择器参数化的正确模式是什么?

Fyo*_*dor 8

这是props在选择器中使用的好习惯。

选择器函数不接收 ownProps 参数。但是,可以通过闭包(参见下面的示例)或使用柯里化选择器来使用 props。

useSelector接受带state参数的函数。如果您将箭头函数传递给useSelector您,您将能够访问闭包中的任何变量,包括props.

此示例取自官方文档

import React from 'react'
import { useSelector } from 'react-redux'

export const TodoListItem = props => {
  const todo = useSelector(state => state.todos[props.id])
  return <div>{todo.text}</div>
}
Run Code Online (Sandbox Code Playgroud)

另请查看官方文档中的过时道具页面,了解如何避免本地props使用中的一些错误。

  • 谢谢!如果选择器比简单的示例更复杂,例如由多个其他选择器组成的选择器等,我是否必须创建一个新实例,关闭 props 并将其记忆在组件的函数范围中?这几乎从堆栈中删除了重新选择。嗯。如果您愿意的话,很想看到一个更真实的组合和记忆选择器示例! (4认同)
  • 您仍然可以引用更复杂的选择器(例如该回调中的重新选择组合选择器) `useSelector(state =&gt; someSelector(state, {id: props.id}}` (4认同)