Извините, если это дублирующий вопрос, но я искал этот вопрос и не нашел ответа, который полностью дал бы решение для моей проблемы. Я хочу получить данные в сагах и обновить localStorage
после получения данных. Тогда я хочу this.forceUpdate()
в моем методе компонента. Но очевидно, что функция this.forceUpdate()
запускается до загрузки данных. Могу ли я обернуть мой handleSubmit
метод класса в обещание или в асинхронное / ожидание, чтобы мой this.forceUpdate()
ожидал получения данных? Спасибо.
FETCHING FUNCTION
export const fetchAuth = data => {
return axios({
method: "post",
url: "http://url/",
headers: {},
data: {
email: data.email,
password: data.password.toString()
}
}).then(response => {
return response.data;
});
};
REDUX-SAGA
export function* authRequestFlow(action) {
try {
const tokens = yield call(fetchAuth, action.payload);
if (tokens) {
yield call(save, "access", tokens.access);
yield call(save, "refresh", tokens.refresh);
yield call(save, "isAuthorized", true);
yield put(authSuccess());
}
} catch (error) {
yield put(authFailure(error.message));
}
}
COMPONENT
class Login extends PureComponent {
handleSubmit = () => {
authRequest();
this.forceUpdate();
};
render() {
if (localStorage.getItem("isAuthorized") === "true")
return <Redirect to="/products" />;
return (
<div className={styles.root}>
<Button
onClick={this.handleSubmit}
>
Submit
</Button>
</div>
);
}
}