Во-первых, вы пытаетесь передать initialValues
через this.setState
, что не сработает, reduxForm ожидает, что initialValues
будет передано как props
.
Одна вещь, которую стоит упомянутьразница между application state
и component local state
, первое состояние приложения - однозначно управляется при помощи редукса, а другое состояние локального компонента - управляется реакцией, которую можно изменить, вызвав this.setState
поэтому, чтобы это исправить, вы должны отправлять действие, когда получаете данные от вашего API, и вы обновляете свои реквизиты в mapStateToProps
ваш код должен выглядеть следующим образом:
class Form extends Component {
componentDidMount () {
const tripId = this.props.match.params.uid;
if(tripId){
this.fetchData(tripId);
}
}
fetchData = async (tripId) => {
await axios.get(`https://toptal-backend-fmaymone.c9users.io/trips/${tripId}`)
.then(res => {
const trip = res.data;
this.props.fillTheForm(trip);
})
console.log('Terminou de carregar')
}
(....)
Form = reduxForm({ form: 'trip', enableReinitialize : true })(Form)
const mapStateToProps = state => {
const { intl, vehicleTypes, users, dialogs, trip } = state
return {
intl,
vehicleTypes,
users,
dialogs,
initialValues: trip
}
}
const fillTheForm = (dispatch) => (trip) => {
// here you dispatch the action and update your application state
// in your reducer when this action is dispatched,
// then mapStateToProps should be called and the data you just
// passed in your reducer should be in (state)
dispatch()
}
export default connect(
mapStateToProps, { setDialogIsOpen, fillTheForm }
)(injectIntl(withRouter(withTheme()(Form))))