【问题标题】:Why connected props are not populated correctly in mapToDispatch ownProps?为什么在 mapToDispatch ownProps 中没有正确填充连接的道具?
【发布时间】:2019-01-17 09:44:05
【问题描述】:

我真的无法理解 mapDispatchToProps 中 mapStateToProps 和 ownProps 的范围

const MyComponent = (props) => (
    <button onClick={props.onClick}>{props.myProp} / {props.otherProp}</button>
)

const ConnctedMyComponent = connect(
    (state) => ({
        myProp: 'mapped',
        otherProp: 'other'

    }),
    (dispatch, ownProps) => ({
        onClick: () => {
            console.log(ownProps);
        }
    })
)(MyComponent)

日志显示

{ myProp: 'original' }
  1. 为什么myProp 没有设置为mapped
  2. 为什么otherProp 不可用?
  3. 按钮内容正确设置为mapped / other
  4. 这是我应该将映射道具传递给映射调度道具的方式吗?
const MyComponent = (props) => (
    <button onClick={() => props.onClick(props.myProp)}>{props.myProp} / {props.otherProp}</button>
)
  1. 有没有办法将映射调度回调绑定到连接的组件(如访问映射存储属性)?

谢谢

【问题讨论】:

  • 可能是减速器的错误?你能展示一下减速机吗?
  • 请检查github.com/reduxjs/redux-devtools/issues/250,这正是您要找的
  • @DanielArtola 这里没有使用减速器,所以它只是映射“问题”

标签: javascript reactjs react-redux


【解决方案1】:

ownProps 只是传递给 connect 生成的外包装组件的 props。

我想你已经创建了这样的组件:

<ConnctedMyComponent myProp="original" />

在这种情况下,ownProps 将始终为{myProp: "original"},因为它反映了给予外包装的道具。

正如您所建议的,如果您想访问已连接的道具,您必须将它们作为参数传递:

const MyComponent = (props) => (
  <button onClick={() => props.onClick(props.myProp)}>{props.myProp} / {props.otherProp}</button>
);

并在 onClick 调度方法中检索它们:

onClick: (props) => {
  console.log(props);
}

【讨论】:

  • 好的。有道理,但是我觉得在调度程序映射器中访问包装组件道具会很方便。谢谢。
  • 目前没有其他选择。如果它回答了您的问题,请验证答案。
【解决方案2】:

ownProps 是传递给 wrapper 组件的道具,在您的示例中为ConnctedMyComponent,当您渲染它时(例如&lt;ConnctedMyComponent myProp='mapped'/&gt;

1) 为什么 myProp 没有设置为映射?

因为您没有将它作为道具传递给ConnctedMyComponent,所以它不存在于ownProps

2) 为什么 otherProp 不可用?

与 1 相同,您没有将它作为道具传递给 ConnctedMyComponent,因此它在 ownProps 中不存在

3) 按钮内容正确设置为映射/其他

您在mapStateToProps 中设置的任何内容都将传递给wrapped 组件MyComponent

4) 这是我应该将映射道具传递给映射调度道具的方式吗?

是的

【讨论】:

  • 对不起。没有粘贴 有问题。所以我使用了 myProp 但由于包装和范围的性质,它无论如何都不会更新。
猜你喜欢
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
相关资源
最近更新 更多