저는 redux, react-redux 및 react로 작은 애플리케이션을 구축하는 javascript / redux / react 초보자입니다. 어떤 이유로 mapDispatchToProps 함수를 connect와 함께 사용할 때 (react-redux 바인딩) 결과 prop을 실행하려고 할 때 디스패치가 함수가 아님을 나타내는 TypeError를받습니다. 그러나 dispatch를 prop으로 호출하면 (제공된 코드의 setAddr 함수 참조) 작동합니다.
redux 문서의 TODO 앱 예제에서 mapDispatchToProps 메서드가 같은 방식으로 설정되어있는 이유가 궁금합니다. 함수 내에서 console.log (dispatch)하면 dispatch가 유형 객체라고 말합니다. 나는 이런 식으로 디스패치를 계속 사용할 수 있지만 redux를 계속하기 전에 왜 이런 일이 발생하는지 더 잘 알 것입니다. 컴파일을 위해 babel-loaders와 함께 webpack을 사용하고 있습니다.
내 코드 :
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
건배.