Next.js
는 처음 렌더링시 SSR
을 하게 됩니다. 따라서 store
를 호출할 때마다 redux store
을 새로 생성하게 되는데요, 이 때 생성하는 redux store
와 이후 CSR
시 생성하는 redux store
가 다르기 때문에 이 둘을 합쳐주는 로직이 필요합니다.
우선 next-redux-wrapper
가 필요한데요,
이 라이브러리가 없다면 Next.js
의 getInitialProps
, getServerSideProps
, getStaticProps
내에서 redux store
에 접근을 할 수 없습니다.
import {
AnyAction,
combineReducers,
configureStore,
getDefaultMiddleware,
} from "@reduxjs/toolkit";
import { HYDRATE, createWrapper } from "next-redux-wrapper";
import axios from "axios";
import getConfig from "next/config";
axios.defaults.baseURL = getConfig().publicRuntimeConfig.apiServerUrl;
export const reducer = (state, action) => {
if (action.type === HYDRATE) {
return {
...state,
...action.payload,
};
}
return combineReducers({
/* */
})(state, action);
};
const makeStore = () =>
configureStore({
reducer,
middleware: [
...getDefaultMiddleware({ thunk: true, serializableCheck: false }),
],
});
export const wrapper = createWrapper(makeStore, {
debug: process.env.NODE_ENV !== "production",
});
유저가 페이지를 요청할 때마다 새로운 redux store
를 생성해야 하기 때문에 makeStore
함수를 작성해줍니다.
import Head from "next/head";
import { wrapper } from "store";
import "index.css";
function MyApp({ Component, pageProps }) {
return (
<>
<Head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>BOOKBOOK</title>
</Head>
<Component {...pageProps} />
</>
);
}
export default wrapper.withRedux(MyApp);
그리고 나서 _app
파일에서 wrapper
의 withRedux HOC
로 컴포넌트를 감싸주면 됩니다. 그럼 이제 각 페이지의 getInitialProps
, getServerSideProps
, getStaticProps
내에서 redux store
에 접근할 수 있게 됩니다.
위의 store/index.ts
를 보시면 reducer
함수를 정의해놓은 것을 볼 수 있는데요,
서버에서 생성한 redux store
와 client에서 생성한 redux store
가 다르기 때문에, 이렇게 서버에서 생성한 store
의 상태를 HYDRATE
라는 액션을 통해 client에 합쳐주는 작업이 필요합니다.
export const reducer = (state, action) => {
if (action.type === HYDRATE) {
return {
...state,
...action.payload,
};
}
return combineReducers({
/* */
})(state, action);
};
action.payload
에는 서버에서 생성한 store
의 상태가 담겨있어 이 둘을 합쳐 새로운 client의 redux store
의 상태를 만들게 됩니다.
Riya Nayar consistently extends discounts to both new and returning customers. When you book a Delhi Escort through her services, you may save up to 25%. Riya Nayar's charges begin at 4500, making it simple for everyone to fulfill their bodily needs.