인프런 커뮤니티 질문&답변
(해결/오타문제) addPost 액션이 동작하지 않는 것에 대해 궁금합니다.
해결된 질문
작성
·
375
·
수정됨
0
안녕하세요. 항상 좋은 강의를 해주셔서 감사합니다.
다름이 아니라 글 작성시 콘솔에 ADD_POST_REQUEST에 대한 리듀서 작동은 확인했으나 그 뒤에 addPost 사가가 작동하지 않는 것에 대해 질문이 있습니다.
위 문제는 watchAddPost()가 정상적으로 ADD_POST_REQUEST에 대한 이벤트를 캐치하지 못 해서 다음 과정이 진행되지 않는 것이라고 생각합니다. 다만 콘솔에서는 이에 대한 것도 뜨지 않아 해당 오류를 해결하기 어려워 질문 드립니다.
다음은 제가 작성한 코드입니다. ()
@/component/PostFrom.js
const PostForm = () => {
const dispatch = useDispatch();
const { imagePaths, addPostDone } = useSelector((state) => state.post);
const [text, onChangeText, setText] = useInput("");
const onSubmit = useCallback(() => {
dispatch(addPostRequestAction(text));
}, [text]);
...
}@/reducer/post.js
export const initialState = {
mainPosts: [...],
...
addPostLoading: false,
addPostDone: false,
addPostError: null
}
export const ADD_POST_REQUEST = "ADD_POST_REQUEST";
export const ADD_POST_SUCCESS = "ADD_POST_SUCCESS";
export const ADD_POST_FAILURE = "ADD_POST_FAILURE";
export const addPostRequestAction = (data) => ({
type: ADD_POST_REQUEST,
data,
});
const dummyPost = (data) => ({
id: 2,
content: data,
User: {
id: 1,
nickname: "윤섭",
},
Images: [],
Comments: [],
});
const reducer = (state: initialState, action) => {
switch (action.type) {
case ADD_POST_REQUEST:
console.log("REDUCER: ADD_POST_REQUEST");
return {
...state,
addPostLoading: true,
addPostDone: false,
addPostError: null,
};
case ADD_POST_SUCCESS:
console.log("REDUCER: ADD_POST_SUCCESS");
return {
...state,
mainPosts: [dummyPost(action.data), ...state.mainPosts],
addPostLoading: false,
addPostDone: true,
};
...
}
}@/sagas/post.js
import { all, fork, delay, put, takeLatest } from "redux-saga/effects";
import axios from "axios";
import {
ADD_POST_REQUEST,
ADD_POST_SUCCESS,
ADD_POST_FAILURE,
ADD_COMMENT_REQUEST,
ADD_COMMENT_SUCCESS,
ADD_COMMENT_FAILURE,
} from "@/reducers/post";
// add post
function addPostAPI(data) {
return axios.post("/api/post");
}
function* addPost(action) {
try {
// const result = yield call(addPostAPI);
yield delay(1000);
console.log("SAGA: addPost");
yield put({
type: ADD_POST_SUCCESS,
data: action.data,
});
} catch (err) {
yield put({
type: ADD_POST_FAILURE,
error: err.response.data,
});
}
}
function* watchAddPost() {
yield takeLatest(ADD_POST_REQUEST, addPost);
}
export default function* postSaga() {
yield all([fork(watchAddPost), fork(watchAddComment)]);
}아래는 ADD_POST_REQUEST 이후 아무런 반응이 없는 스크린샷입니다.

퀴즈
Redux Thunk의 주된 역할은 무엇일까요?
상태 변화 로깅하기
비동기 액션 처리 돕기
액션 타입 상수화 강제하기
리듀서 불변성 자동으로 관리하기





watchAddPost와 postSaga, addPost에 콘솔 입력 후 재실행을 해보았으나 이전과 동일한 증상입니다.

