개발자 키우기

react-redux 사용 본문

Front-end/React

react-redux 사용

개발자 키우기 2023. 6. 17. 17:28

0. 사용하는 이유

 

간단히 이야기하면 기존 방식은 부모에서 props로 데이터를 넘겨 자식 컴포넌트에서 사용하게 되는데 자식이의 자식의 자식....  계속 내려가게 된다면 예를 들어 proos.proos.proos.proos.proos.proos.proos.proos 와 같이 사용하게 된다면

복잡할 뿐만 아니라 실수 발생 확률이 높아진다. 

redux를 사용하면 store를 구독하는 컴포넌트들이 구독하고 있는 값이 변경되면 리렌더링 되도록 하는 방식이다.

 

코딩애플 유투버님이 참 쉽게 설명해 주니 보면 좋다 ( https://www.youtube.com/watch?v=QZcYz2NrDIs )


1. 설치

npm install redux ( https://ko.redux.js.org/ )

npm install react-redux ( https://react-redux.js.org/ )


2. 사용

 

App.js ( 해야할게 없음 )

 

import Header from './components/Header';
import Footer from './components/Footer';
import 'bootstrap/dist/css/bootstrap.min.css';
import Top from './components/Top';
import Bottom from './components/Bottom';

function App() { 
  return (
    <div>
      <Header />
      <h1>메인 페이지</h1>
      <Top />
      <Bottom />
      <Footer />
    </div>
  );
}

export default App;

 

store.js

 

export const increase = () => ({ type: 'INCREMENT' });  // 가져와 사용할때 편하게 사용하기 위함
export const decrease = () => ({ type: 'DECREMENT' });

const initstate = { // 기본 값
  number: 0,
};

const reducer = (state = initstate, action) => { // 값 수정
  switch (action.type) {
    case 'INCREMENT':
      return { number: state.number + 1 };
    case 'DECREMENT':
      return { number: state.number - 1 };
    default:
      return state;
  }
};

export default reducer;

 

index.js 

 

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from 'react-router-dom';
import reducer from './store';
import { Provider } from 'react-redux';
import { createStore } from '@reduxjs/toolkit';

const root = ReactDOM.createRoot(document.getElementById('root'));
const store = createStore(reducer); // 스토어 생성

root.render(
  <BrowserRouter>
    <Provider store={store}>  // App에서 사용하기 위해 App을 감싸야함
      <App />
    </Provider>
  </BrowserRouter>,
);

reportWebVitals();

 

Top.js

 

import React from 'react';
import { useSelector } from 'react-redux';

const Top = (props) => {
  const number = useSelector((store) => store.number); // 스토어에서 가져다 사용
  return (
    <div>
      <h1>Top</h1>
      번호 : {number}
    </div>
  );
};

export default Top;

 

Bottom.js

 

import React from 'react';
import { useDispatch } from 'react-redux';
import { decrease, increase } from '../store';

const Bottom = (props) => {
  const dispatcher = useDispatch();  // 스토어에서 가져다 사용
  return (
    <div>
      <h1>Bottom</h1>
      <button onClick={() => dispatcher(increase())}>증가</button
      <button onClick={() => dispatcher(decrease())}>감소</button>
    </div>
  );
};

export default Bottom;

 

 - 출처 메타코딩 최주호

'Front-end > React' 카테고리의 다른 글

스프링서버와 리엑트 연동  (0) 2023.06.18
react-bootstrap 사용 방법  (0) 2023.06.15
router dom 및 history 사용하기  (0) 2023.06.15
props 패싱하기  (0) 2023.06.15
React의 훅(Hook)  (0) 2023.06.13