我习惯看到这样的事情:
export default connect(mapStateToProps, mapDispatchToProps)(BookList);
mapDispatchToProps
看起来像这样:
function mapDispatchToProps(dispatch) {
return bindActionCreators({selectBook: selectBook}, dispatch);
}
export default reduxForm({
validate,
form: 'PostsNewForm'
})(
connect(null, {createPost})(PostsNew)
);
我发现这部分特别令人费解:connect(null, {createPost})(PostsNew)
。
这行代码究竟与上面的代码有什么不同?为什么我们不需要mapDispatchToProps?
答案 0 :(得分:0)
如果需要,您可以使用mapStateToProps
。 react-redux
不需要它。
取自DOCS:
的示例import React, { Component } from 'react';
import { reduxForm } from 'redux-form';
import { connect } from 'react-redux';
class Example extends Component {
// ...
};
const mapStateToProps = (state) => ({
// ...
});
const mapDispatchToProps = (dispatch) => ({
// ...
});
Example = connect(
mapStateToProps,
mapDispatchToProps
)(Example);
export default reduxForm({
form: 'example' // a unique name for this form
})(Example);
答案 1 :(得分:0)
connect' s mapDispatchToProps
允许对象文字的简写形式,也就是说,如果要映射到的函数(传递给组件的最终结果)与动作创建者具有相同的签名,将被派遣,有必要做所有bindActionCreator
事情的吵闹。将对象文字作为mapDispatchToProps
参数传递,告诉react-redux为您执行此操作。
因此,您的第一个示例可以重写为
connect(mapStateToProps, { selectBook })(BookList)
如果您不确定{ selectBook }
和{ selectBook: selectBook }
的等效原因,您可能还想查看下面的mdn链接。