
Next.js와 Redux 같이 사용하기
Next.js와 Redux는 복잡한 웹 애플리케이션을 구축하는 데 강력한 도구입니다. Next.js는 React 애플리케이션을 서버 측 렌더링하기 위한 프레임워크이며, Redux는 애플리케이션 상태를 예측 가능한 방식으로 관리하는 상태 관리 라이브러리입니다. 이 블로그 글에서는 Redux를 Next.js와 통합하는 방법을 살펴보겠습니다.
Redux로 Next.js 설정하기
시작하기 위해, Next.js에서 Redux를 사용하기 위해 Redux 래퍼를 제공하는 next-redux-wrapper 패키지를 설치해야 합니다. 다음 명령을 실행하여 설치할 수 있습니다:
npm install --save next-redux-wrapper
설치가 완료되면 Next.js 프로젝트를 위한 루트 파일을 생성해야 합니다. 프로젝트 디렉토리에서 ./pages 디렉토리에 _app.js라는 새 파일을 생성하세요. 이 파일은 Redux를 초기화하고 Next.js 컴포넌트에 Redux 스토어를 제공하는 데 사용됩니다.
_app.js 파일을 열고 다음 코드를 추가하세요:
import React from "react";
import { createStore } from "redux";
import { Provider } from "react-redux";
import App, { Container } from "next/app";
import withRedux from "next-redux-wrapper";
// Redux 리듀서를 여기에서 정의하세요
const reducer = (state = { foo: "" }, action) => {
switch (action.type) {
case "FOO":
return { ...state, foo: action.payload };
default:
return state;
}
};
// Redux 스토어를 생성하세요
const makeStore = (initialState, options) => {
return createStore(reducer, initialState);
};
class MyApp extends App {
static async getInitialProps({ Component, ctx }) {
// 여기에서 액션을 디스패치할 수 있습니다
ctx.store.dispatch({ type: "FOO", payload: "foo" });
// 컴포넌트의 초기 속성을 가져옵니다
const pageProps = Component.getInitialProps
? await Component.getInitialProps(ctx)
: {};
return { pageProps };
}
render() {
const { Component, pageProps, store } = this.props;
return (
<Container>
<Provider store={store}>
<Component {...pageProps} />
</Provider>
</Container>
);
}
}
export default withRedux(makeStore)(MyApp);
이 코드는 Redux 스토어를 설정하고 Next.js 컴포넌트를 Redux 프로바이더로 래핑하여 Redux 스토어에 액세스하고 액션을 디스패치할 수 있게 합니다.
컴포넌트를 Redux에 연결하기
Redux 설정이 완료되었으므로 이제 Next.js 컴포넌트를 Redux에 연결할 수 있습니다. 예를 들어, ./pages 디렉토리에 인덱스 페이지가 있다고 가정해보겠습니다. index.js 파일을 열고 다음 코드를 추가하세요:
import React from "react";
import { connect } from "react-redux";
class IndexPage extends React.Component {
render() {
return (
<div>
<h1>인덱스 페이지</h1>
<p>Foo 값: {this.props.foo}</p>
</div>
);
}
}
const mapStateToProps = (state) => ({
foo: state.foo,
});
export default connect(mapStateToProps)(IndexPage);
이 코드에서는 connect 함수를 사용하여 IndexPage 컴포넌트를 Redux 스토어에 연결합니다. mapStateToProps 함수를 사용하여 Redux 상태를 컴포넌트의 속성에 매핑하여 Redux 스토어의 foo 값을 액세스할 수 있습니다.
결론
Next.js와 Redux를 통합함으로써 애플리케이션 상태를 효과적으로 관리하고 구성된 방식으로 컴포넌트 간에 데이터를 공유할 수 있습니다. next-redux-wrapper 패키지를 사용하면 Next.js 프로젝트에서 Redux를 설정하는 과정을 단순화하여 복잡한 애플리케이션을 쉽게 구축할 수 있습니다.
이 블로그 글에서는 Redux를 Next.js와 연동하는 단계와 컴포넌트를 Redux 스토어에 연결하는 방법을 다루었습니다. 이 지식을 활용하여 Next.js와 Redux를 사용하여 React 애플리케이션을 자신있게 구축할 수 있습니다.
참고 자료 :
https://stackoverflow.com/questions/52095681/using-react-redux-with-next-js
같은 카테고리의 다른 글 보기 :