-
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
7. thunk에서 라우터 연동하기 · GitBook #67
Comments
안녕하세요 리액트 공부중입니다. 이전 내용까지는 모두 실습하여 따라왔으나 이부분만 문제가생겨 문의합니다. |
Router를 사용하면 PostContainer의 useEffect가 적용되지 않아 빈 화면이 됩니다. (useEffect 바디 내에 다른 코드를 넣어봐도 다 실행되지 않습니다.) 그 상태에서 새로고침해야지만 적용되네요. BrowserRouter를 사용하면 history 쓸수 없다고 콘솔에 뜨고.. 왜 그러는지 감을 못잡겠네요. |
덕분에 편하게 배웠슴다 |
react-router-dom v6로 올라가면서 history.push('/'); 가 제대로 동작되지 않는 현상이 있습니다. https://github.com/remix-run/react-router/issues/8264#issuecomment-991271554에서 방법을 찾아서 해결했습니다. |
remix-run/react-router#8264 (comment) 링크가 제대로 안 걸려서 코드 첨부 드립니다. import { createBrowserHistory } from 'history'; let history = createBrowserHistory(); function App() { history.push("/foo"); |
v6에 올라와서 제가 제시하는 대안은 useNavigate()를 dispatch와 함께 넘겨서 thunk함수의 사용성을 최대화 하는 방향입니다. import {useDispatch, useSelector} from "react-redux";
import {useEffect} from "react";
import {getPost, goToHome} from "../modules/posts";
import Post from "../components/Post";
import {useNavigate} from "react-router-dom";
function PostContainer({postId}) {
const {data, loading, error} = useSelector(state => state.posts.post);
const dispatch = useDispatch();
const navigate = useNavigate();
useEffect(() => {
dispatch(getPost(postId));
}, [postId, dispatch]);
if (loading) {
return <div>로딩중...</div>;
}
if (error) {
return <div>에러 발생!</div>;
}
if (!data) {
return null;
}
return (
<>
<button onClick={() => dispatch(goToHome(navigate))}>홈으로 이동</button>
<Post post={data} />
</>
);
}
export default PostContainer; posts.js는 export const goToHome = (navigate) => (dispatch, getState) => {
navigate("/");
} |
@bsj805 |
위에 분에 코멘트 보고 다시 작성해 보왔습니다. import React from 'react'; const customHistory = createBrowserHistory(); const store = createStore( const root = ReactDOM.createRoot(document.getElementById('root')); // If you want to start measuring performance in your app, pass a function |
@clean-teach 다른 thunk 함수와 같은 방법으로 사용하시면 됩니다. export const goToHome = (navigate) => (dispatch, getState) => {
console.log(getState().posts);
dispatch({type: 'GET_POSTS'})
navigate("/");
}; |
7. thunk에서 라우터 연동하기 · GitBook
https://react.vlpt.us/redux-middleware/07-router-with-thunk.html
The text was updated successfully, but these errors were encountered: