Как лучше обновить представление на основе ответа API. Допустим, у нас есть настройка, при которой пользователь должен быть перенаправлен на панель мониторинга при успешном входе в систему, и на экране входа в систему отображается сообщение о любой ошибке.
Что я сейчас использую
Я привык вызывать создателя действия, чтобы, наконец, попасть в конечную точку для ответа. И на основании этого ответа отправьте соответствующий успех или неудачу action
, чтобы обновить мое глобальное состояние, на которое я подписываюсь в моем компоненте, используя connect(mapStateToProps, mapActionsToProps)
.
Задача
Допустим, у меня есть loginSuccess
в моем глобальном состоянии, и я использую его для перенаправления или обработки ошибок в моем компоненте Login. Например, я хочу также обработать ответ для экрана сброса пароля. Поэтому я храню другую информацию в своем глобальном состоянии и использую ее в соответствующем компоненте.
Это даже проблема?
У меня такое ощущение, что это слишком много информации, чтобы хранить в глобальном состоянии.
Что я читаю новенького?
Итак, я начал читать о передаче callback
моему создателю действия, который обрабатывает ответ. Таким образом, логика обработки ошибок остается локальной для компонента.
* * Пример тысячи тридцать один * ** +1032 +1033 *
Login.js
componentDidMount(){
this.props.login({
data, // login payload.
callback: (response) => this.handleResponse(response)
})
}
// response handler.
handleResponse = response => {
this.setState({isError: response.isError});
}
render () {
/* Use the this.state.isError to determine either to redirect or show error */
}
Actions.js
export const login = payload => ({
type: ATTEMPT_LOGIN,
payload
})
saga.js
// login handler in saga.
function* loginAttempt({payload}) {
const {data, callback} = payload;
try {
const resp = yield apiCaller.call(method, url, data, headers); // utitly to fetch data and return a standard response.
callback(resp);
}catch(error){
callback(DEFAULT_ERROR_RESPONSE); // {isError: true, message: 'Something went wrong'}
}
}
Какой из них лучше?
Есть ли лучший способ справиться с такого рода вещами? Как вы, ребята, справляетесь с этим?