๐Ÿฑ #10 React.js - Redux

๋ฐ•์ค€์„ยท2022๋…„ 11์›” 10์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
11/13
post-thumbnail

๐Ÿงฉ Redux

Redux๋Š” React์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์ด๋ผ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ props๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.
์ž์‹๋ผ๋ฆฌ ์ฃผ๊ณ  ๋ฐ›์„ ๋•Œ๋„ ๋ถ€๋ชจ๋ฅผ ๊ฑฐ์ณ ์ „๋‹ฌ ํ•ด์•ผํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด props๋ฅผ ์—„์ฒญ ๋งŽ์ด ์จ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ redux๋ฅผ ์“ด๋‹ค๋ฉด ์ƒํƒœ์ €์žฅ์†Œ ์ €์žฅ์œผ๋กœ ํ• ๋‹นํ•œ๋‹ค. ์•„๋ž˜์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์Šคํ† ์–ด๋กœ ์ง์ ‘์ ์œผ๋กœ ๋ฐ”๋กœ ์š”์ฒญํ•˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์Šคํ† ์–ด๋กœ ๊ฐ€๊ธฐ๊นŒ์ง€์˜ 4๊ฐ€์ง€ ์Šคํ…์ด ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋กœ๊ทธ์ธํ•˜๊ธฐ Action์„ ๋˜์ง„๋‹ค. ๊ทธ๋Ÿผ Reducer๊ฐ€ ์บ์น˜ํ•ด์„œ ๋งŽ์€ ์ž‘์—… ์ง€์‹œ๋“ค์ด ์žˆ๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜๋Š” ์ˆœ๊ฐ„ ์ž‘์—…์„ ์‹œ์ž‘ํ•œ๋‹ค. ์Šคํ† ์–ด์—์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.

์—ฌ๊ธฐ์„œ Action์„ ๋˜์ ธ์ฃผ๋Š” ํ•จ์ˆ˜๋Š” useDispatch๋ผ๋Š” ํ•จ์ˆ˜๊ณ , ๋˜ ์Šคํ† ์–ด์— ์žˆ๋Š” ๊ฐ’์„ ๊ฐ€์ ธ๋‹ค ์“ธ ๋•Œ๋Š” useSelector๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์“ด๋‹ค.

๐Ÿงฉ Redux setup

๋จผ์ € ๋ฆฌ๋•์Šค ํŽ˜์ด์ง€๋ฅผ ๋“ค์–ด๊ฐ€์„œ Redux ์‹œ์ž‘ํ•˜๊ธฐ๊ฐ€ ๋ณด์ผ ๊ฒƒ์ด๋‹ค. ๊ฑฐ๊ธฐ์„œ Redux core๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

# NPM
npm install redux

# Yarn
yarn add redux

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํ•œ๊ฐ€์ง€ ๋” ์„ค์น˜ ํ•ด์•ผํ•œ๋‹ค. ๊ทธ ๊ฒƒ์€ ๋ฐ”๋กœ React Redux๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿคฆโ€โ™‚๏ธ ์™œ Redux๋ฅผ ์„ค์น˜๋ฅผ ํ–ˆ๋Š”๋ฐ ๋˜ React Redux๋ฅผ ์„ค์น˜ ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

๊ทธ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. Redux๋Š” React๋งŒ ์“ฐ์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— React Redux๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฆฌ์—‘ํŠธ ๋ฆฌ๋•์ŠคํŽ˜์ด์ง€๋กœ ๊ฐ€์„œ Get Started๋ฅผ ๋ˆŒ๋Ÿฌ ๋“ค์–ด๊ฐ„๋‹ค.

An Existing React App ํ•ญ๋ชฉ์—์„œ ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

# If you use npm:
npm install react-redux

# Or if you use Yarn:
yarn add react-redux

์„ค์น˜๋ฅผ ๋‹คํ–ˆ๋‹ค๋ฉด ์ด์ œ ์ฝ”๋“œ๋กœ ๊ฐ€์„œ setup์„ ํ•ด์•ผํ•œ๋‹ค.

๋จผ์ € index.js ํŒŒ์ผ๋กœ ๊ฐ€์„œ ์•„๋ž˜ ์ฝ”๋“œ ์ฒ˜๋Ÿผ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค.

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { Provider } from 'react-redux';
import store from './redux/store'

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <Provider store={store}>
    <App />
  </Provider>
);

์œ„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.

์ด ์—๋Ÿฌ๋Š” <Provider store={store}>๊ฐ€ ํŒŒ์ผ์ด ์กด์žฌ ํ•˜์ง€ ์•Š์•„์„œ์ด๋‹ค. ๊ทธ๋Ÿผ store ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋ณด์ž. src์—์„œ reduxํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— store.jsํŒŒ์ผ์„ ๋งŒ๋“ ๋‹ค.

store.js ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ํŒŒ์ผ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

import { createStore } from 'redux';
import reducer from "./reducer/reducer";


let store = createStore(reducer);

export default store;

๊ทธ๋ฆฌ๊ณ  reduxํด๋”์—์„œ reducerํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์—reducer.jsํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

๊ทธ ํ›„ reducer.js ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค.

const initialState = {

 };
 
const contactReducer = (state = initialState, action) => {
 
 
 };
 
export default contactReducer;

์ด๊ฑธ๋กœ ๊ธฐ๋ณธ ์„ธํŒ…์€ ๋์ด๋‹ค.

profile
์•ˆ๋…•ํ•˜์„ธ์š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๊ธ€์„ ์ด์ „ ์ค‘์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€