Я создаю приложение, которое получает данные пользователя из бэкэнда при входе пользователя в систему и отображает его в профиле пользователя, мне нужно установить оператор загрузки, например loading...
, вместо профиля, прежде чем все данные будут поступать из бэкэнда. затем отобразите данные вместо этого
создатели моих действий:
export const loginUser = (loginData) => (dispatch) => {
axios.post('/signin', loginData)
.then(res => {
let FBIdToken = `Bearer ${token}`;
localStorage.setItem('FBIdToken', FBIdToken);
dispatch(getUserData());
})
.catch(err => {
dispatch({
type: SET_ERRORS,
payload: err.response && err.response.data
});
});
}
export const getUserData = () => dispatch => {
dispatch({ type: LOADING_USER });
axios.get('/user')
.then(res => {
dispatch({
type: SET_USER,
payload: res.data
})
})
.catch(err => console.log(err))
}
reducer:
const intialState = {
authenticated: false,
loading: false,
credentials: {},
};
export default (state = intialState, action) => {
switch (action.type) {
case SET_USER:
return {
authenticated: true,
loading: false,
...action.payload,
}
case LOADING_USER:
return {
loading: true,
...state
}
default:
return state;
}
};
страница входа:
const handleSubmit = (e) => {
e.preventDefault();
loginUser(loginData);
}
теперь, когда я нажмите кнопку отправки на странице входа. handlesubmit
функция запускает loginUser
создателя действия, который в роли запускает getUserData
создателя действия.
теперь в создателе действия getUserData это действие отправляется {type: LOADING_USER}
и это состояние должен быть возвращен редуктором до того, как userData поступит из бэкэнда:
{
loading: true,
credentials: {},
authenticated: false
}
, а затем данные поступят после запроса ax ios и измените loading
на false
и установите учетные данные пользователя, но это не тот сценарий в моем случае, поскольку загрузка никогда не выполняется в моем коде, и loading...
никогда не отображается до того, как учетные данные пользователя установлены в качестве профиля пользователя .. что не так в моем код?