1. Ваши действия getComments
и postComment
должны быть thunks , потому что они асинхронные.
Вот видео, которое помогает объяснить роль, которую выполняют thunks:https://egghead.io/lessons/javascript-redux-dispatching-actions-asynchronously-with-thunks
(Вам нужно будет подключить thunks, используя Redux applyMiddleware
, когда вы createStore
.)
Эти thunk не будут напрямую интерпретироваться вашим редуктором...
2. Вам нужно будет создавать регулярные действия для обработки того, что вы хотите делать после того, как getComments
и / или postComment
.
Вы хотите, чтобы комментарии, которые вы выбираете, были сохранены в состоянии, поэтому вы 'Вы сделаете действие SET_COMMENTS
, и ваш редуктор справится с ним так, как вы подключили GET_COMMENTS
.
Ваш блок 1030 * не будет нуждаться в регулярном действии (с вашим текущим кодом)потому что вы не изменяете состояние Redux в ответ на что-либо после публикации.
Эти шаги вместе выглядят так:
// Actions
const SET_COMMENTS = "set_comments";
const setComments = comments => ({
type: SET_COMMENTS,
payload: comments
});
// Thunks
const getCommentsAsync = () => dispatch => {
return axios
.get("http://localhost:5000/comments")
.then(comments => dispatch(setComments(comments)));
};
const postCommentAsync = comment => dispatch => {
return axios.post("http://localhost:5000/comments", comment);
};
// Reducer
const initialState = {
comments: []
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case SET_COMMENTS:
const comments = action.payload;
return {
...state,
comments
};
default:
return state;
}
};