Я создаю форму, в которую хочу загрузить данные при начальной загрузке.
Я установил Mount для вызова моей функции fetchClaims. Я получаю результат и могу записать его в консоль. Что я не могу сделать, так это обновить свое состояние, чтобы потом использовать его в своей форме.
componentDidMount() {
this.onInit(this.props);
}
onInit = props =>
props
.fetchClaims()
.then(results => console.info('results = ' + JSON.stringify(results)))
.then(claims => this.setState({ results }))
.then(results =>
console.info('results state = ' + JSON.stringify(this.state)),
);
Полученные данные выглядят как
results = {
type: 'CLAIMS_FETCHED',
claims: [
{
_id: '5b0d5b7f035a00f06003e6b8',
claimID: '123456',
claimDate: '2018-05-14T00:00:00.000Z',
carrier: 'BCBS NJ',
},
],
};
и состояние выглядит как
state = {
data: { email: '' },
loading: false,
errors: {},
fromdate: '',
todate: '',
claims: {},
results: {},
};
Я хотел бы заполнить массив Claims в утверждениях в состоянии, а затем сопоставить его.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Попробуйте вернуть значение после первого журнала консоли и исправьте имя параметра при установке состояния.
onInit = props => props.fetchClaims()
.then(results => {
console.info("results = " + JSON.stringify(results));
return results;
})
.then(results => this.setState({ claims: results.claims }))
.then(() => console.info("results state = " + JSON.stringify(this.state)));
@ Реакция правильная, вы можете отобразить это в своей функции рендеринга.
Я переписал ваш код, попробуйте следующее:
onInit = props => props.fetchClaims()
.then(results => {
console.info("results = " + JSON.stringify(results))
this.setState( { results }, () => console.info("results state = " + JSON.stringify(this.state) ))
})
попробуйте это, вы можете получить
onInit = props => props.fetchClaims()
.then(
res =>res.json() )
.then(results => this.setState({results }, ()
=> console.info('results ', results )))
спасибо, это сработало. Теперь, когда это есть в моем состоянии, я считаю, что могу «нанести на карту» это. Это верно?