Обработка ошибок AJAX в React.componentDidMount

0

Согласно Facebook, лучший способ загрузить исходные данные для компонента React - сделать запрос AJAX в функции componentDidMount:

https://facebook.github.io/react/tips/initial-ajax.html

что-то вроде:

           componentDidMount: function () {
                var self = this;
                Store.fetch()
                    .done(function () {
                        if (self.isMounted()) {
                            self.setState(getLatestState());
                        }
                    })
                    .fail(function (err) {
                        throw err;
                    }).always(function(){
                        Store.addChangeListener('rc-listen',self._onChange);
                    });
                },

Каков наилучший способ обработки ошибок в этом случае? Поскольку AJAX является асинхронным, не должен ли компонентDidMount принимать обратный вызов в качестве аргумента?

  • 1
    Если вы на мгновение забудете о реализации, что бы хотел видеть пользователь, если запрос не выполнен? Пустой экран, сообщение об ошибке? Чтобы справиться с этим, вы можете просто установить состояние «загрузка не удалась» и условно показать сообщение об ошибке.
  • 0
    Дэвид, да, но это означает, что у меня одинаковая логика ошибок во всех моих функциях componentDidMount. С обратным вызовом я могу обработать все ошибки с помощью одного и того же кода. Донтча думаешь?
Показать ещё 1 комментарий

1 ответ

1

Во-первых, когда вы используете componentDidMount, компонент был вставлен в DOM и готов к использованию (добавление событий для элементов, доступ к элементам dom,...). Итак, компонент на этом этапе всегда монтируется.

Во-вторых, если запрос ajax является успешным, вы изменяете состояние, чтобы показывать обновленные данные. Но если запрос ajax терпит неудачу, вы можете изменить состояние для отображения и сообщение об ошибке пользователю (например, и, если хотите, отправить сообщение об ошибке на ваш сервер для сохранения истории ошибок).

  • 0
    Я согласен, это не имеет особого смысла, но документы React предлагают использовать «if (this.isMounting ())», посмотрите на ссылку в OP
  • 1
    В любом случае, привет @AlexMills, эту функцию «isMounting» можно было бы удалить в будущем: «Она может быть полностью удалена в будущей версии React». (из моего случая у меня никогда не было проблем, не используя его на componentDidMount)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню