Я бы посоветовал вам не сохранять сообщения в двух местах. Это несколько отрицательно сказывается на использовании редукса. На самом деле вам не нужна запись в качестве переменной состояния в Posts
классе. Всякий раз, когда в резервном хранилище появляется новое состояние, Класс попадает в цикл обновления.
Кроме того, вы можете посмотреть на redux-thunk
, если вы делаете вызовы API.
import thunk from 'redux-thunk';
import rootReducer from './reducers/index';
const store = createStore(
rootReducer,
applyMiddleware(thunk)
);
Это поможет вам перенести логику извлечения API в действия и редукторы, что сделает ваши представления чистыми.
Изменить это
export const GetPosts = (posts) => {
return (dispatch, getState) => {
dispatch({type: GET_POSTS, posts })
console.log('this works i guess', posts);
}
}
до
export const GetPosts = (posts) => {
return (dispatch, getState) => {
Axios.get(process.env.REACT_APP_GET_POSTS)
.then( (res) => {
dispatch({type: GET_POSTS, res.data })
})
})
}
}
Изменить это
componentWillMount(){
this.getPosts();
}
до
componentWillMount(){
this.props.GetPosts();
}
Теперь вам не понадобится componentDidUpdate
.
Кроме того, если вам интересно, как показать Загрузка ... до тех пор, пока вызов API не будет завершен, вы можете добавить ключ isFetching в свой магазин.
const initialState = {
post: [],
postError: null,
posts:[],
isFecthing: false
}
и может добавить действие что-то вроде ChangeFetchStats
export const GetPosts = (posts) => {
return (dispatch, getState) => {
dispatch({type: CHANGE_STATE, false});
Axios.get(process.env.REACT_APP_GET_POSTS)
.then( (res) => {
dispatch({type: CHANGE_STATUS, true);
dispatch({type: GET_POSTS, res.data })
})
})
}
}