React 강의 듣고 나만의 사이트 만들기 시작!!
먼저 초반부 Front 작업을 진행한다.
쪼랩이라 라이브러리 다운받을때 빼먹는건 진행하면서 차차 고치도록 해야겠다.
친절하게 코드가 다 들어있지않은 이유는 스스로 공부하는 목적이기때문에 사소한 부분이 많이 빠져있다.
1.
내 사이트명의 폴더를 생성한다.
OKAYOON
2.
Front 와 Back 따로 진행해야하기에 폴더를 두개 생성한다.
OKAYOON
-front
-back
// front
npm init
npm i next@9 react react-dom
npm i prop-types
npm i eslint eslint-plugin-import eslint-plugin-react eslint-plugin-react-hooks -d
npm i -D babel-eslint eslint-config-airbnb eslint-plugin-import eslint-plugin-react-hooks eslint-plugin-jsx-a11y
npm i antd styled-components @ant-design/icons
npm init 해준 뒤 install해주자
내가 본 제로초님 강의에서는 next9버전을 사용했다.
next@9의 @는 특정 버전을 지정하여 install 할 수 있다.
eslint를 사용하지 않는다면 install 할 필요없다.
-D는 개발모드에서만 사용할 모듈들이다.
antd를 통해 스타일 작업을 진행하였다. (bootstrap과 같이 웹, 앱 디자인 개발을 위한 프레임워크이다.)
index.js
pages 폴더 하위에 파일을 생성하면 next가 자동으로 인식해준다.
라우터 필요없이 주소/login 식으로 접근 가능하다.
next를 통해 localhost로 확인하기위해서는 package.json의 script 부분 수정이 필요하다.
(물론 명령어를 쳐도된다.)
package.json
아래와 같이 하면 포트를 바꿀 수 있다.
// package.json
"scripts": {
"dev": "next -p 3060"
},
그 후 cmd에서 run 시켜준다.
npm run dev
작업을 하다보면 콘솔에 에러가 뜨는것을 확인할 수 있다.
babel를 통해 해결해주자.
관련 플러그인을 install 해준다.
npm i babel-plugin-styled-components
설정도 빼먹지말자
/front 하위로 .babelrc 파일을 생성하여 아래 내용을 작성한다.
{
"presets": ["next/babel"],
"plugins": [
["styled-components", {
"ssr": true,
"displayName": true
}]
]
}
ssr: 서버사이드 렌더링
displayName: 렌더링이 된 후 보호된 네이밍들을 컴포넌트 이름으로 변경한다.
redux, saga를 통해 state관리 및 통신작업을 할 것이다.
npm i redux next-redux-wrapper react-redux redux-devtools-extension
npm i redux-saga next-redux-saga axios immer
npm i -d redux-devtools-extension
front 하위에 store 폴더를 생성한 뒤 파일을 하나 만들자.
네이밍은 configureStore.js인데, 알아서하자.
내용은 아래와 같다.
import { createWrapper } from 'next-redux-wrapper';
import { applyMiddleware, createStore, compose } from 'redux';
import { composeWithDevTools } from 'redux-devtools-extension';
import createSagaMiddleware from 'redux-saga';
import reducer from '../reducers';
import rootSaga from '../sagas';
const loggerMiddleware = ({ dispatch, getState }) => (next) => (action) => {
console.log(action);
return next(action);
};
const configureStore = () => {
const sagaMiddleware = createSagaMiddleware();
const middlewares = [sagaMiddleware, loggerMiddleware];
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 파일에서 사용해주자.
페이지에 _app.js나 _document.js등과 같이 Next.js에 내장되어 있는 _document.js, _app.js, _error.js를 커스터마이징하여 레이아웃을 새롭게 구성하는 방법이 있다.
그냥 pages 폴더 하위에 _app.js라는 네이밍으로 파일을 생성하면된다.
(next에서 제공하는 것으로 특정 컴포넌트 렌더링 시 Layout을 적용 제외하기 위한 방법이라고 한다.)
여튼 저기에다가 미들웨어 만들어 둔 것을 wrapper.withRedux로 감싸줘야 프로젝트의 모든 컴포넌트와 페이지에 적용된다고 한다.
Next.js에서 Redux 사용하기에 대해 읽어보자 --> velog.io/@jehjong/Next.js%EC%97%90%EC%84%9C-Redux%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-Redux-wrapper