我希望在提交表单时使用dispatch,但它给出了一个错误,说它未定义。我不确定我做错了什么。我想知道是否有人能发现错误?
此外,我正在查看其他人的代码,有时他们使用调度,有时他们只是使用this.props,这是更好的,有什么区别?
submitRenter(e){
e.preventDefault()
dispatch(addUser());
}
render() {
return (
<form>
<label>
<input type="text"/>
</label>
<button onClick={this.submitRenter} type="submit">Sumbit</button>
</form>
)
}
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators({
addUser
}, dispatch)
};
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(RegisterRenter);
答案 0 :(得分:3)
如果您不提供mapDispatchToProps
功能,则connect
将使用其默认行为并提供组件this.props.dispatch
。如果您执行提供mapDispatch
功能,那么它取决于您返回的内容,并且您需要在该返回值中手动包含dispatch
。< / p>
&#34;绑定&#34;动作创建者是这样你可以使用它们而不必明确使用dispatch()
函数。如果您将动作创建者作为道具传递给未连接到Redux的子项,则此功能特别有用。
我个人建议始终使用connect
支持mapDispatch
的对象速记语法来绑定动作创建者,甚至更多。举个例子:
import {addUser} from "./userActions";
const actions = {
addUser
};
class RegisterRenter {
submitRenter(e) {
e.preventDefault();
this.props.addUser();
}
// rendering, etc
}
export default connect(mapState, actions)(RegisterRenter);
有关详细信息,请参阅Redux FAQ entry on "why don't I have props.dispatch
?"和我的博文Idiomatic Redux: Why use action creators?。