Проверьте логическое значение из магазина и если ложная отправка - PullRequest
0 голосов
/ 03 октября 2019

Идея состоит в том, чтобы получить данные профиля пользователя за один раз. Мой план состоял в том, чтобы проверить логическое значение isLoaded, если профиль был ранее загружен или нет. Если оно ложно, getUser будет отправлен.

Я пропускаю только проверочную часть isLoaded, и у меня ничего не получается. Поскольку я не могу найти другой способ, кроме как использовать хук в операторе if.

Каков будет правильный способ достижения моей цели?

export const getUser = (): ThunkAction<Promise<void>, {}, {}, AnyAction> => {
    if(!useSelector((state: State) => state.userProfile.isLoaded)) {
        return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise<void> => {
            return new Promise<void>((resolve) => {
                dispatch(isFetching(true));
                console.log("FETCHING PROFILE IN PROGRESS");
                setTimeout(() => {
                    let user = <User>{};
                    axios.get(process.env.REACT_APP_BASE_URL + "/users/" + process.env.REACT_APP_USER_ID)
                        .then(response => {
                            user = response.data.data;
                            console.log("USER:", user);
                            dispatch(isLoaded(true));
                            dispatch(set(user));
                        })
                        .catch(error => {
                            console.log(error);
                        });
                    setTimeout(() => {
                        dispatch(isFetching(false));
                        console.log("LOADED PROFILE");
                        resolve()
                    }, 1000)
                }, 3000)
            })
        }
    } else {
        return async (dispatch: ThunkDispatch<{}, {}, AnyAction>): Promise<void> => {
            return new Promise<void>((resolve) => {
                resolve();
            })
        }
    }
};

1 Ответ

0 голосов
/ 03 октября 2019

Хорошо, я думаю, что вы должны управлять действиями точно так же.

В магазине пользователь должен быть неопределенным в начале.

const state: UserState = {
  user: undefined,
  isFetching: false,
  lastTimeFetched: undefined,
  invalidated: true
}

Тогда Вам следует всегда проверять, еслиУ пользователя есть значение в хранилище.

Когда вы загружаете приложение или компонент, оно будет неопределенным, и вы сделаете вызов остальной конечной точке.

Во время вызова кконечной точкой будет isFetching.

После этого вы должны установить user для того пользователя, которого вы получили, lastTimeFetched - на время, когда вы выбрали пользователя, и сделать недействительным значение false.

Почему время и недействительным? Может быть полезно, если вы хотите перезагрузить пользовательскую информацию через определенное время.

Я думаю, вы должны проверить, имеет ли поле пользователя значение, только в первый раз, когда вы загружаете функциональный компонент, который использует этозначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...