Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 组件如何神奇地接收'dispatch'作为其第一个参数?_Reactjs_Redux_React Redux - Fatal编程技术网

Reactjs 组件如何神奇地接收'dispatch'作为其第一个参数?

Reactjs 组件如何神奇地接收'dispatch'作为其第一个参数?,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我很难理解这个神奇的论点,它突然出现在一个演示组件的第一个论点中 到目前为止,我的理解是第一个AddTodo被认为是表示组件,后者是容器组件 在这种情况下,表示组件似乎被注入了dispatch作为第一个参数。不幸的是,回首往事后,我感到困惑,并意识到情况并非如此 dispatch参数在演示文稿组件中如何显示?当您在:AddTodo=connect()(AddTodo)中使用connect()时,您正在使用dispatch组件注入调度现在可通过道具在组件中使用。如果使用参数解构,则可以将其称为th

我很难理解这个神奇的论点,它突然出现在一个演示组件的第一个论点中

到目前为止,我的理解是第一个
AddTodo
被认为是表示组件,后者是容器组件

在这种情况下,表示组件似乎被注入了
dispatch
作为第一个参数。不幸的是,回首往事后,我感到困惑,并意识到情况并非如此

dispatch
参数在演示文稿组件中如何显示?

当您在:
AddTodo=connect()(AddTodo)
中使用
connect()
时,您正在使用
dispatch
组件注入
<代码>调度
现在可通过道具在组件中使用。如果使用参数解构,则可以将其称为
this.props.dispatch()
,或者直接称为
dispatch()
,即
let AddTodo=({dispatch})..

以下是官方redux文档中的详细描述:

连接([mapStateToProps]、[mapDispatchToProps]、[mergeProps]、[options])

[mapDispatchToProps(dispatch,[ownProps]):dispatchProps](对象或函数):如果传递了一个对象,则其中的每个函数都将假定为Redux操作创建者。一个具有相同函数名的对象,但每个动作创建者都封装在一个分派调用中,因此可以直接调用它们,将合并到组件的props中。如果函数被传递,它将被分派。这取决于您返回一个对象,该对象以某种方式使用dispatch以您自己的方式绑定动作创建者。(提示:您可以使用Redux中的bindActionCreators()帮助程序。)如果省略它,默认实现只是将分派注入组件的props中。如果将ownProps指定为第二个参数,则其值将是传递给组件的props,当组件收到新道具时,mapDispatchToProps将被重新调用

react-redux可以接收一个
mapDispatchToProps
参数,用
dispatch
调用包装动作创建者。如果未通过
mapDispatchToProps
connect
将使用:


正如您所看到的,返回了具有
dispatch
属性的对象。此对象将与
mapStateToProps
中的道具以及通过属性传递给组件的任何道具(
ownProps
)合并。最终对象将是通过
connect
传递给原始组件的道具

正如Piotr Berebecki所说,
connect()
注入分派。它将其注入到props中,
({dispatch})
正在从props中解构dispatch,并将其分配给变量
dispatch

您可以重写
AddTodo

let AddTodo = (props) => {
 const { dispatch } = props;
...
};

示例中有超链接错误…只是为了强调参数的分解。并不是说第一个参数“神奇地”是
dispatch
函数。该参数实际上是传递给组件的
props
,并附加了
dispatch
属性。感谢您强调默认行为。。。我错过了这一行,直到你的粗体格式……)谢谢你@DiegoCardosa,我根据你的评论更新了我的答案。很高兴能帮上忙,@piotr。但有一件事,那就是“卡多佐”;)lolOops,对不起@DiegoCardoso;)哦,我明白了,。。。感谢您对源代码的强调。我更清楚地理解了文档中提到的默认值是如何实现的。
const Todo = ({ onClick, completed, text }) => (
    /* Omitted */
)

Todo.propTypes = {
  onClick: PropTypes.func.isRequired,
  completed: PropTypes.bool.isRequired,
  text: PropTypes.string.isRequired
}
const defaultMapDispatchToProps = dispatch => ({ dispatch })
let AddTodo = (props) => {
 const { dispatch } = props;
...
};