Saya seorang pemula javascript / redux / react membangun aplikasi kecil dengan redux, react-redux, & react. Untuk beberapa alasan saat menggunakan fungsi mapDispatchToProps bersama-sama dengan connect (react-redux binding) saya menerima TypeError yang menunjukkan bahwa pengiriman bukan fungsi ketika saya mencoba menjalankan prop yang dihasilkan. Namun, ketika saya memanggil dispatch sebagai prop (lihat fungsi setAddr di kode yang disediakan) itu berfungsi.
Saya ingin tahu mengapa ini terjadi, dalam contoh aplikasi TODO di redux, metode mapDispatchToProps disiapkan dengan cara yang sama. Ketika saya console.log (dispatch) di dalam fungsi itu dikatakan dispatch adalah tipe objek. Saya dapat terus menggunakan pengiriman dengan cara ini tetapi saya akan merasa lebih baik mengetahui mengapa ini terjadi sebelum saya melanjutkan lebih jauh dengan redux. Saya menggunakan webpack dengan babel-loader untuk dikompilasi.
Kode Saya:
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
Bersulang.