Redux, react-redux ve react ile küçük bir uygulama geliştiren bir javascript / redux / react acemisiyim. Bazı nedenlerden dolayı mapDispatchToProps işlevini connect (react-redux bağlama) ile birlikte kullanırken ortaya çıkan prop çalıştırmaya çalıştığımda gönderimin bir işlev olmadığını belirten bir TypeError alıyorum. Ancak dağıtımı bir destek olarak çağırdığımda (verilen kodda setAddr işlevine bakın) çalışıyor.
Bunun nedenini merak ediyorum, redux belgelerindeki TODO uygulamasında mapDispatchToProps yönteminin aynı şekilde ayarlandığını. İşlevin içinde console.log (dispatch) kullandığımda, dispatch'in tür nesnesi olduğunu söylüyor. Dispatch'i bu şekilde kullanmaya devam edebilirdim, ancak redux ile devam etmeden önce bunun neden olduğunu bildiğimde daha iyi hissederim. Derlemek için babel yükleyicilerle webpack kullanıyorum.
Kodum:
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
Şerefe.