Есть два редюсера:
user
function userReducer(state = initialState, action: IPersonAction) {
switch (action.type) {
case SET_USER:
if (action.logout) {
Cookies.remove("token");
return {
isAuth: false,
info: initialState.info
};
}
return {
info: action.payload,
isAuth: true
};
default:
return initialState;
}
}
posts
function postsReducer(state = initialState, action: IPostAction) {
switch (action.type) {
case SET_POSTS:
if (!Array.isArray(action.payload)) return;
return [...action.payload];
case ADD_POST:
if (Array.isArray(action.payload)) return;
return [action.payload, ...state];
case REMOVE_POST:
return state.filter((post: IPost) => +post.id !== +action.payload);
default:
return initialState;
}
}
В
App
файле обновляю их значения:
React.useEffect(() => {
dispatch(checkAuthAsyncAction());
dispatch(getPostsAsyncAction(setText));
}, []);
checkAuthAsyncAction:
function checkAuthAsyncAction() {
return (dispatch: React.Dispatch<any>) => {
checkAuth()
.then((data) => {
const { person } = data;
dispatch(setUser(person));
});
};
}
getPostsAsyncAction:
function getPostsAsyncAction(
setText: React.Dispatch<React.SetStateAction<string>>
) {
return (dispatch: React.Dispatch<any>) => {
getAllPosts()
.then((data) => {
const { posts } = data;
dispatch(setPosts(posts));
});
};
}
Все данные приходят правильно.
При обновлении страницы срабатывает
SET_POSTS
=>
posts = [{...},{...}], user = {}
,
потом срабатывает
SET_USER
=>
user = [{...}], posts = []
, то есть posts обнуляется