Жду завершения лаундж-саги в методе класса компонента - PullRequest
0 голосов
/ 08 ноября 2019

Извините, если это дублирующий вопрос, но я искал этот вопрос и не нашел ответа, который полностью дал бы решение для моей проблемы. Я хочу получить данные в сагах и обновить 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>
        );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...