TIL - 21.08.13 ๐Ÿ‘จโ€๐Ÿ’ป - Redux

์„ฑํ›ˆยท2021๋…„ 8์›” 13์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
51/59
post-thumbnail

TIL - 21.08.13 ๐Ÿ‘จโ€๐Ÿ’ป


Redux

์–ด์ œ๋„ ๋ฉ”์†Œ๋“œ๋“ค์„ ๋Œ€๋žต์ ์œผ๋กœ ์ •๋ฆฌํ–ˆ์—ˆ์ง€๋งŒ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

Store

์ƒํƒœ๊ฐ€ ๊ด€๋ฆฌ๋˜๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๊ณต๊ฐ„์ด๋‹ค.
createStore() ๋ฉ”์†Œ๋“œ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋Š” ๋ฆฌ๋“€์„œ์˜ ์œ„์น˜์ด๊ณ  ๋‘๋ฒˆ์งธ ์ธ์ž๋กœ store์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

Action

๊ฐ์ฒด ์•ˆ์— ํƒ€์ž…์ด๋ผ๋Š” ํ”„๋กœํผํ‹ฐ ํ‚ค๊ฐ€ ๋ฌด์กฐ๊ฑด ์žˆ์–ด์•ผํ•˜๊ณ , ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋‹ค๋ฅธ ํ‚ค๋ฅผ ๊ฐ€์ง„ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Reducer

ํ˜„์žฌ ์ƒํƒœ์™€ Action์„ ์ด์šฉํ•ด ๋‹ค์Œ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ธ๋‹ค.

Action ๊ฐ์ฒด๊ฐ€ dispatch์—๊ฒŒ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๊ณ , dispatch๋Š” Reducer๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์ƒˆ๋กœ์šด state๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ dispathch๋Š” ์ผ์ข…์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
์ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰์ด ๋˜์—ˆ์„๋•Œ dispatch๊ฐ€ Reducer๋ฅผ ํ˜ธ์ถœํ•ด ์ธ์ž๋ฅผ action ๊ฐ์ฒด๋ฅผ ๋ฆฌ๋“€์„œ ์•ˆ์œผ๋กœ ๋˜์ ธ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ๋“€์„œ๊ฐ€ ํ•ด๋‹น action ๊ฐ์ฒด๋ฅผ ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๊ฒฐ๋ก ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚จ๋‹ค.

-> ๋ฐ์ดํ„ฐ๊ฐ€ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ํ˜๋Ÿฌ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ.


Redux์˜ ์žฅ์ 

  1. ์ƒํƒœ๋ฅผ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  2. ์œ ์ง€๋ณด์ˆ˜
  3. ๋””๋ฒ„๊น…์— ์œ ๋ฆฌํ•˜๋‹ค. (action๊ณผ state log ๊ธฐ๋ก ์‹œ)
  4. ํ…Œ์ŠคํŠธ๋ฅผ ๋ถ™์ด๊ธฐ ์‰ฝ๋‹ค.

๋ฆฌ๋•์Šค์˜ 3์›์น™๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฐœ๋…

  1. Single source of truth -> Store
    • ๊ฐ™์€ ์ƒํƒœ๋Š” ํ•œ๊ฐ€์ง€ ์ถœ์ฒ˜๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š”๋‹ค.
  2. State is read-only -> Action
    • action์œผ๋กœ๋งŒ ์ƒํƒœ ๊ฐ’ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • action ๊ฐ์ฒด์™€ reducer๋ฅผ ์ด์šฉํ•ด store๋ฅผ ๋ณ€๊ฒฝํ• ๋• store์˜ ๋ฐ์ดํ„ฐ์™€ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค.
  3. Changes are made with pure function -> Reducer
    • reducer๋Š” ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ๋ฐ›์ง€๋„ ์•Š์œผ๋ฉฐ state ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ์ฃผ์ง€๋„ ์•Š๋Š”๋‹ค.

Presentational Component vs Container Component


PresentationalContainer
๊ธฐ๋Šฅ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ง€๋Š”๊ฐ€?์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€?
Redux์™€ ์—ฐ๊ด€์„ฑ์—†์Œ์žˆ์Œ
Read DataProps์—์„œ data๋ฅผ ์ฝ์ŒRedux์˜ State์— ์ ‘๊ทผ(useSelector)
Change dataprops์—์„œ ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœRedux Action

ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฉ”๋‰ด ์•ˆ์˜ ๋ฉ”๋‰ด๋“ค์ด๊ณ  ์ปจํ…Œ์ด๋„ˆ๋Š” ๊ทธ ๋ฉ”๋‰ด๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฉ”๋‰ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.


๋Œ€ํ‘œ์ ์ธ Redux Hook

useSelector

์ปดํฌ๋„ŒํŠธ์™€ ์Šคํ…Œ์ดํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ํ›…์ด๋‹ค.
๋””์ŠคํŒจ์น˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ๋””์ŠคํŒจ์น˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•ด์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ์ปดํฌ๋„ˆํŠธ์™€ ์Šคํ…Œ์ดํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

import {useSelector} from 'react-redux';

const state = useSelector(state => state.Reducer)

useDispatch

์•ก์…˜ ๊ฐ์ฒด๋ฅผ ๋ฆฌ๋“€์„œ์— ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ›…์ด๋‹ค.

import { useSelector, useDispatch } from 'react-redux'

const state = useSelector(state=> state.Reducer)
const dispatch = useDispatch();

dispatch((e)=>{type: 'ADD', payload: {key: e}})

์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.


Retrospect ๐Ÿง

์˜ค๋Š˜ ๋ฆฌ๋•์Šค๋ฅผ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด๋ดค๋‹ค.
๋ฆฌ๋•์Šค ํ›…์„ ์ฒ˜์Œ๋ดค์„๋•Œ dispatch?? ์Šคํ† ์–ด๋Š” ์–ด๋””์— ๋ถ™ํžŒ๊ฑฐ์ง€? ์ด๋ ‡๊ฒŒ ์–ด๋ฆฌ๋ฒ„๋ฆฌํ–ˆ์—ˆ๋Š”๋ฐ
์กฐ๊ธˆ ์ต์ˆ™ํ•ด์ง€๋‹ˆ๊นŒ ์ด ๋ฐฉ๋ฒ• ๋ฐ–์— ๋ชป์“ธ ๊ฒƒ ๊ฐ™๋‹ค.

๋ฆฌ๋•์Šค๋„ ์žฌ๋ฐŒ์–ด์„œ ๋ฐฐ์šฐ๋Š” ๋ง›์ด ์žˆ๋‹ค!
๋œฌ๊ธˆ ์—†์ง€๋งŒ ํŒŒ์ด์ฌ๋„ ๊ธฐ๋Œ€๋œ๋‹ค!!

profile
์–ด๋–ป๊ฒŒ ์ด๊ฑธ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ

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

comment-user-thumbnail
2021๋…„ 8์›” 13์ผ

์˜ค๋Š˜๋„ ์ž˜ ๋ณด๊ณ ๊ฐ€์š”~^ใ…ก^~

1๊ฐœ์˜ ๋‹ต๊ธ€