SSR은 서버에서 사용자에게 보여줄 페이지를 모두 구성해 사용자에게 페이지를 보여주는 방식
데이터없이 화면만 받고 데이터 로딩창을 띄우면서 백엔드에 데이터를 요청해 화면을 렌더링
// configureStore
import {createWrapper} from 'next-redux-wrapper'
import { applyMiddleware, compose, createStore } from 'redux';
import reducer from '../reducers'
import rootSaga from '../sagas'
import {composeWithDevTools} from 'redux-devtools-extension'
import createSagaMiddleware from 'redux-saga';
const configureStore = ()=>{
const sagaMiddleware = createSagaMiddleware();
const middlewares = [sagaMiddleware];
const enhancer = process.env.NODE_ENV === 'production'
? compose(applyMiddleware(...middlewares))
: composeWithDevTools(
applyMiddleware(...middlewares),
);
const store = createStore(reducer, enhancer)
store.sagaTask = sagaMiddleware.run(rootSaga)
return store
}
const wrapper = createWrapper(configureStore,{
debug:process.env.NODE_ENV === 'development',
})
export default wrapper ;
// _app.js
import wrapper from '../store/configureStore';
const App = ({ Component })=>{
return(
<>
<Head>
<title>NodeBird</title>
</Head>
<Component />
</>
)
};
App.Proptypes = {
Component:Proptypes.elementType.isRequired
}
export default wrapper.withRedux(App);
// index.js
import wrapper from "../store/configureStore";
import {END} from 'redux-saga';
const Home () => {
...
}
export const getServerSideProps = wrapper.getServerSideProps((context)=>{
//로그인 쿠키공유
const cookie = context.req? context.req.headers.cookie : '';
axios.defaults.headers.Cookie = '';
if(context.req && cookie){
axios.defaults.headers.Cookie = cookie;
}
axios.defaults.headers.Cookie = cookie;
// 데이터 요청
context.store.dispatch({
type:LOAD_USER_REQUEST
});
context.store.dispatch({
type:LOAD_POST_REQUEST
});
context.store.dispatch(END);
await context.store.sagaTask.toPromise()
})
export default Home;
export const getStaticProps = wrapper.getStaticProps(async (context) => {
console.log('getStaticProps');
context.store.dispatch({
type: LOAD_USER_REQUEST,
data: 1,
});
context.store.dispatch(END);
await context.store.sagaTask.toPromise();
});
📑 reference
안녕하세요, tech 기업에서 일하는/ 일하기를 희망하는 여성들을 모아서 모임을 만들고 있어요!
자세한 사항은 및 링크 참조바랍니다 :)
https://velog.io/@emilyscone/SheKorea-1%EA%B8%B0-%EB%A9%A4%EB%B2%84%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4