Я пытаюсь установить состояние внутри React, когда получаю ответ от бэкэнда (метод http post). Что я собираюсь сделать, так это отправить данные на сервер, а затем, когда ответ вернется, я хочу установить свойство isSubmitting
как false. при этом мое состояние не зависит от данных ответа -> только от статуса ответа. Как я могу установить состояние, когда ответ возвращается?
Я не хочу просто записывать этот контент в console.log, я хочу сделать this.setState({ isSubmitting })
, когда контент будет готов.
Я подумал о чем-то вроде: if (content) { this.setState({ isSubmitting }) }
но не знаю правильно ли это.
(async () => {
const rawResponse = await fetch('https://httpbin.org/post', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({a: 1, b: 'Textual content'})
});
const content = await rawResponse.json();
console.log(content);
})();
Я решил проблему, заменив async/await на обещания:
return fetch('https://httpbin.org/post', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(blabla)
})
.then(resp => resp.json())
.then(resp => console.log(resp));
Итак, теперь я могу установить состояние в последней строке. Но мне все еще любопытно, как это работает с обещаниями.
this.setState
всякий раз, когда хотите обновить что-либо в состоянии компонента. Обратите внимание, чтоthis.setState({ isSubmitting })
установит для свойстваisSubmitting
состояния любое значение переменнойisSubmitting
, поэтому убедитесь, что оно определено. - person Robin Zigmond   schedule 30.04.2019content
декларации? Разве это не синхронно, иisSubmitting
не будет установлено до того, как будут возвращены фактические данные? - person Daniel Jackowiak   schedule 30.04.2019await
в том, что он ожидает разрешения обещания, что позволяет вам писать асинхронный код, как если бы он был синхронным. - person Robin Zigmond   schedule 30.04.2019content
переменная. Но я не хотел использоватьcontent
для установки состоянияisSubmitting
какfalse
. - person Daniel Jackowiak   schedule 30.04.2019