Soy un principiante javascript / redux / react construyendo una pequeña aplicación con redux, react-redux, y react. Por alguna razón, cuando uso la función mapDispatchToProps junto con connect (react-redux vinculante) recibo un TypeError que indica que el despacho no es una función cuando intento ejecutar el accesorio resultante. Sin embargo, cuando llamo a dispatch como accesorio (vea la función setAddr en el código provisto) funciona.
Tengo curiosidad por saber por qué esto es así, en el ejemplo de la aplicación TODO en los documentos redux, el método mapDispatchToProps se configura de la misma manera. Cuando console.log (dispatch) dentro de la función dice que dispatch es type object. Podría seguir usando el despacho de esta manera, pero me sentiría mejor sabiendo por qué sucede esto antes de continuar con redux. Estoy usando webpack con babel-loaders para compilar.
Mi código:
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
Salud.