@ amirKovacevic совершенно правильно. Вы никогда не должны изменять состояние напрямую: https://reactjs.org/docs/state-and-lifecycle.html#do-not-modify-state-directly
Я не совсем понимаю ваш код, но я думаю, что вы хотите сделать что-то вроде этого:
onSubmit() {
api1(textboxvalue).then(data => {
if(/* data matches condition1 */) {
this.setState(prevState => ({
arrayOfElements1: [...prevState.arrayOfElements1, data]
}), () => {
const requests1 = Promise.all(this.state.arrayOfElements1.map(function
(element) {
return api2(element)
})).then(data => this.setState({ data1loaded: true })) // I assume you want to have an indication loading was complete
})
}
})
}
Обратите внимание на ад обратного вызова, в который я полез, потому что я не использовал async / await. Также обратите внимание, что я использовал обратный вызов setState: https://reactjs.org/docs/react-component.html#setstate
Установка состояния асинхронная, поэтому вы не должны использовать его сразу после использования setState
, по крайней мере, если вы хотите получить новые значения.
Кроме того, мой пример только для первого массива элементов.
О, и я новичок в SO, так что извините, если что-то не соответствует обычным стандартам комментариев SO. :)