我是一名javascript / redux / react初学者,使用redux,react-redux和react构建一个小型应用程序。出于某种原因,当在连接(反应-redux绑定)的同时使用mapDispatchToProps函数时,我收到一个TypeError,指示我尝试执行生成的prop时,dispatch不是函数。但是,当我将调度称为道具时(请参阅提供的代码中的setAddr函数),它可以工作。
我很好奇这是为什么,在redux docs的示例TODO应用程序中,mapDispatchToProps方法是以相同的方式设置的。当我在函数内部进行console.log(dispatch)时,它说dispatch是类型对象。我可以继续以这种方式使用调度,但是在继续使用redux之前,我会更好地知道为什么会这样。我正在将webpack与babel-loaders一起使用进行编译。
我的代码:
import React, { PropTypes, Component } from 'react';
import { connect } from 'react-redux';
import { setAddresses } from '../actions.js';
import GeoCode from './geoCode.js';
import FlatButton from 'material-ui/lib/flat-button';
const Start = React.createClass({
propTypes: {
onSubmit: PropTypes.func.isRequired
},
setAddr: function(){
this.props.dispatch(
setAddresses({
pickup: this.refs.pickup.state.address,
dropoff: this.refs.dropoff.state.address
})
)
},
render: function() {
return (
<div>
<div className="row">
<div className="col-xs-6">
<GeoCode ref='pickup' />
</div>
<div className="col-xs-6">
<GeoCode ref='dropoff' />
</div>
</div>
<div className="row">
<div className="col-xs-6">
<FlatButton
label='Does Not Work'
onClick={this.props.onSubmit({
pickup: this.refs.pickup.state.address,
dropoff: this.refs.dropoff.state.address
})}
/>
</div>
<div className="col-xs-6">
<FlatButton
label='Works'
onClick={this.setAddr}
/>
</div>
</div>
</div>
);
}
})
const mapDispatchToProps = (dispatch) => {
return {
onSubmit: (data) => {
dispatch(setAddresses(data))
}
}
}
const StartContainer = connect(mapDispatchToProps)(Start)
export default StartContainer
干杯。
当您不提供
mapDispatchToProps
第二个参数时,如下所示:那么您将自动获得对组件的道具的派遣,因此您可以:
没有任何mapDispatchToProps