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

时间:2019-07-05 03:14:46

标签: javascript reactjs redux react-redux react-hooks

我刚刚开始使用useSelector中提供的新react-redux钩子。

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

mapStateToProps(state, ownProps) {
   return {
      user: userSelector(state, ownProps.userId)
   }
}

将道具直接传递到选择器中是否被认为是反模式?

如果为“否”,那么如何使用useSelector实现这一目标?

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

1 个答案:

答案 0 :(得分:2)

在选择器中使用props是一个好习惯。

  

选择器函数未接收到ownProps参数。但是,可以通过闭包(请参见下面的示例)或使用咖喱选择器来使用道具。

useSelector接受带有state参数的函数。如果将箭头函数传递给useSelector,则可以闭包访问任何变量,包括props

此示例摘自official documentation

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>
}

还可以查看官方文档中的stale props页,了解如何避免本地props使用中的某些错误。