Реагировать на обновление состояния самостоятельно после запроса axios? - PullRequest
0 голосов
/ 19 марта 2019

В настоящее время я работаю над приложением React, в котором я использую контекстный API React для объединения бизнес-логики приложения.

Внутри контекста все функции CRUD делают аксиос запросы к API и возвращают обещания, которые могут использоваться компонентами для обработки ошибок и ввода. Это контекст https://github.com/luckyrose89/notes-app/blob/master/src/AppContext.js

Мое приложение имеет массив блокнотов, который будет содержать отдельные объекты блокнотов. И каждый из этих объектов имеет массив заметок, который ссылается на заметки, сделанные в каждой записной книжке. Это контроллер API https://github.com/luckyrose89/notebook-app-backend/blob/master/controllers/notebook.js

Пока я создавал, читал, обновлял и удалял записные книжки, мне приходилось вносить изменения в состояние в контексте приложения, чтобы вещи обновлялись в моем приложении. Но когда я создаю, читаю, обновляю или удаляю что-либо из массива заметок в блокнотах, мне не нужно вносить эти изменения в состояние. Я возвращаю обещание, и государство меняется само по себе. Может ли кто-нибудь помочь мне понять, почему это происходит?

Например, когда я создаю новую заметку в блокноте и отправляю ее, используя это:

handleSubmit = event => {
event.preventDefault();
this.props
  .createNotepage(this.props.match.params.id, this.state)
  .then(response => {
    this.clearInputs();
    this.props.history.push("/viewbooks");
  })
  .catch(err => {
    this.setState({
      errorMessage: err.response.data.error
    });
  });};

Мне не нужно менять состояние в контексте приложения, вручную добавляя ответ из API в массив заметок ноутбука. Может кто-нибудь, пожалуйста, объясните это.

1 Ответ

0 голосов
/ 19 марта 2019

вместо передачи this.state, попробуйте передать {...this.state} и посмотрите, что произойдет

...