-
Notifications
You must be signed in to change notification settings - Fork 100
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
5. redux-thunk로 프로미스 다루기 · GitBook #63
Comments
export const createPromiseThunk = (type, promiseCreator) => { return param => async dispatch => { 위의 해당 소스에 궁금한점이 있습니다. |
중간에 리팩토링전에 module/posts.js 부분에 오타가 있는거 같습니다. 액션 반환값에 로딩값들이 전부다 true로 설정되어 있어 success, error일 경우도 무조건 로딩중이 뜨게 되네요. |
리펙토링 하는 부분 export const createPromiseThunk = ...이 코드 해석이 잘 안되네요ㅠ |
위 같은 코드도 벨로퍼트님이 쭉 강의 해오신거 다 봤지만 낯선 방식의 코드에요ㅠ; |
|
@leesd88 리팩토링 하기 전에 기존 posts 모듈에서 thunk 함수 (getPost, getPosts) 하고 리듀서에 반복되는 로직이 많았기 때문에 반복되는 부분은 재사용하고 변경을 줘야하는 부분만 파라미터로 받아서 thunk랑 reducer를 생성해주는 함수들을 asyncUtils.js 파일에서 만드는건데 그 중에서 case GET_POSTS:
case GET_POSTS_SUCCESS:
case GET_POSTS_ERROR:
return handleAsyncActions(GET_POSTS, 'posts')(state, action); 이 부분도 동일 챕터 맨마지막에 보시면 핸들러 두개를 합쳐서 하나의 리듀서로 만드는 부분에서 동일한 코드가 나온답니다! 순수 자바스크립트 문법인데, 스위치문에서 case 내에 리턴이나 break가 없을 경우 return이나 break를 만날 때까지 다음 케이스들의 코드가 주루룩 다 실행되는것을 이용한 것이에요. |
return param => async dispatch => { 위의 dispatch 값은 아래와 같이 get Post by id 의 경우 위와 같이 선언하고 |
Functions are not valid as a React child. This may happen if you return a Component instead of from render. Or maybe you meant to call this function rather than return it. 라우팅 과정에서 계속 위와 같은 오류가 나서 스택오버플로우를 참조하여 App.js의 postlistpage와 postpage 작성부분에 꺽쇠를 넣어주었더니 작동하는데 혹시 오류 원인과 해결에 대한 답변을 들을 수 있을까요? } exact={true} /> } /> {/* element={PostPage는 왜 안되는지} */} |
이제는 좀 코드가 바뀌어서 https://reactrouter.com/docs/en/v6/getting-started/tutorial#add-some-routes function App() {
return (
<Routes>
<Route path="/" element={<PostListPage />} exact={true}>
<Route path=":id" element={<PostPage />} />
</Route>
</Routes>
);
} 이런식으로 하시면 페이지 추가가 구현이 안되는데, import PostListContainer from "../containers/PostListContainer";
import {Outlet} from "react-router-dom";
const PostListPage = () => {
return (
<>
<PostListContainer />
<Outlet />
</>
);
}
export default PostListPage; postpage도 바뀌어야합니다 import PostContainer from "../containers/PostContainer";
import {useParams} from "react-router-dom";
const PostPage = () => {
const params = useParams();
return <PostContainer postId={parseInt(params.id, 10)} />;
} 라우터부터는 이제 React Router 홈페이지의 tutorial을 따라가시는 것이 더 잘 보일지도 모르겠네요. 많은 것이 바뀌었습니다. |
App.jsimport React from 'react';
import { Route, Routes } from 'react-router-dom';
import PostListPage from './pages/PostListPage';
import PostPage from './pages/PostPage';
function App() {
return (
<>
<Routes>
<Route exact path="/" element={<PostListPage />} />
<Route path=":id" element={<PostPage />} />
</Routes>
</>
);
}
export default App; PostPage.jsimport React from 'react';
import PostContainer from '../containers/PostContainer';
import { useParams } from 'react-router';
function PostPage() {
const params = useParams();
return <PostContainer postId={parseInt(params.id, 10)} />;
}
export default PostPage; |
5. redux-thunk로 프로미스 다루기 · GitBook
https://react.vlpt.us/redux-middleware/05-redux-thunk-with-promise.html
The text was updated successfully, but these errors were encountered: