React

React - Redux1

hyunzxn 2022. 1. 25. 15:20

컴포넌트가 많아지면 props를 통해 데이터를 전달하기가 몹시 복잡해집니다. 이런 복잡함을 조금은 덜기 위해 Redux 라는 라이브러리를 사용합니다. Redux 라이브러리에 대해서 공부해보겠습니다.

 

1️⃣  Redux 세팅법

 

① 우선 리덕스를 사용하기 위해서는 라이브러리를 설치해야합니다. 터미널에 yarn add redux react-redux 를 입력해줍니다. redux 와 react-redux 두 개의 라이브러리를 설치하는 명령어입니다. redux는 데이터를 엄격하게 관리하는 기능, react-redux는 리덕스를 리액트에서 사용할 수 있게 도와주는 기능을 제공합니다.

 

 

 

② 라이브러리 설치가 끝났다면 프로젝트 디렉토리에서 index.js 를 열어줍니다. 그리고 맨 상단에 다음과 같은 코드를 적어줍니다.

 

import { Provider } from 'react-redux';

 

그리고 <Provider> 태그로 state 값 공유를 원하는 컴포넌트를 다 감싸면 됩니다. 

 

....

<Provider>
  <App />
</Provider>

....

 

<Provider> 태그가 App 컴포넌트를 감싸고 있는 것을 확인할 수 있습니다. 

 

 

 

 

③ redux에서 state를 만드려면 createStore() 를 이용해야합니다. 이를 위해서 index.js에 다음과 같이 import 해줍니다.

 

import { createStore } from 'redux';

 

createStore는 리액트에서 state를 만들 때 사용했던 useState 같은 것이라 생각하면 됩니다. import를 했으면 createStore를 통해 state를 하나 만들어줍니다.

 

let store = createStore(()=>{ return [{id : 0, name : '멋진신발', quan : 2}]  })

 

createStore( ) 에서 소괄호 안에는 함수가 들어갑니다. 그 함수의 return으로 만들고 싶은 state를 만들면 됩니다. 그러면 그 state가 변수에 저장이 되는 것입니다.

 

 

④  state를 만들었다면 이제 그 만든 state를 props처럼 등록을 해줘야 합니다. props 사용하기 위해서 컴포넌트에 등록을 해줬던 것처럼 말이죠. 

 

....

<Provider store={store}>
  <App />
</Provider>

....

 

Provider 안에 추가해준 것을 확인할 수 있습니다. 

 

 

 

 

2️⃣  redux에 만든 state 사용법

 

저장한 state를 다른 컴포넌트에서 사용하는 방법을 알아보겠습니다. 

 

일단 state를 사용하고 싶은 컴포넌트 파일에 가서 하단에 다음과 같이 코드를 작성해줍니다.

 

function stateProps(state){
  return {
    state : state
  }
}

export default connect(stateProps)(Cart);

 

두 코드의 의미는 다음과 같습니다. 

 

우선 함수는 store에 저장된 state를 props화 해주는 함수입니다. 그래서 이름을 일단 저런 식으로 지었는데 자유롭게 지어도 상관없습니다.  함수에서 보이듯이 return을 줘야합니다. 그리고 state : state 부분에서 빨간색 state는 자유롭게 작명을 해도 됩니다. 파란색 state는 redux에서 만든 state를 의미합니다. 따라서 코드를 이렇게 적으면 만들어 놓은 state 모두가 state에 저장됩니다. 

 

아래 코드는 react-redux 라이브러리 사용법입니다. connect 라는 함수에 위에서 만든 함수를 집어넣어줍니다. 그리고 그 다음 소괄호에는 state를 사용할 컴포넌트를 집어넣어줍니다. 그러면 이제 store에 저장된 모든 데이터들이 props로 엮인 채로 export 됩니다.

 

 

 

그러면 이제 이제 자유롭게 데이터바인딩을 할 수 있습니다. 예를 들어 store에 저장된 데이터 중 이름을 데이터바인딩 하고 싶다면 props.state[0].name 이렇게 할 수 있습니다. array 형식으로 데이터가 저장되어 있기 때문에 state[0] 이렇게 한 것입니다. 

728x90

'React' 카테고리의 다른 글

React - Redux 3  (0) 2022.01.26
React- Redux 2  (0) 2022.01.25
React - useEffect  (0) 2022.01.24
React - Router3  (0) 2022.01.22
React - Router2  (0) 2022.01.21