WEB/REACT

Redux

mingzoo 2021. 7. 13. 22:38

λ¦¬λ•μŠ€λŠ” μ–΄λ ΅λ‹€...

Redux?

μ»΄ν¬λ„ŒνŠΈκ°€ λ§Žμ„μˆ˜λ‘ λ³΅μž‘ν•΄μ§€λŠ” μƒνƒœλ₯Ό 효율적으둜 κ΄€λ¦¬ν•˜λŠ” 라이브러리

 

why?

ꡬ쑰가 점점 λ³΅μž‘ν•΄μ§€λ©΄μ„œ λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈλΆ€ν„° μ΅œν•˜μœ„ μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ λ‚΄λ €μ˜€λ©΄μ„œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” 것은 λ„ˆλ¬΄ λΉ„νš¨μœ¨μ !

λ¦¬λ•μŠ€λ‘œ λ°”κΉ₯μ—μ„œ μƒνƒœκ΄€λ¦¬λ₯Ό ν•΄μ£Όλ©΄μ„œ 효율적으둜 μ ‘κ·Ό!

이해가 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄ μ•„λž˜μ™€ 같은 상황을 보자!

πŸ‘‡

μœ„μ˜ μ»΄ν¬λ„ŒνŠΈ ꡬ쑰가 μ•„λž˜μ˜ μ»΄ν¬λ„ŒνŠΈκ΅¬μ‘°μ™€ 같이 λ³΅μž‘ν•΄μ‘Œλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

이럴 경우, μ΅œν•˜μœ„ μžμ‹ μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ μƒνƒœλ₯Ό μ „λ‹¬ν•΄μ£Όκ±°λ‚˜ μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ°œμƒν•œ μ΄λ²€νŠΈμ— μ˜ν•΄μ„œ λ‹€λ₯Έ λ£¨νŠΈμ— μžˆλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ³€ν™”λ₯Ό λΆˆλŸ¬μΌμœΌμΌœμ•Όν•˜λŠ” μƒνƒœμΌ 경우일 λ•Œ λΉ„νš¨μœ¨μ μœΌλ‘œ μž‘λ™ν•˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

μ΅œν•˜μœ„ μžμ‹ μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ μƒνƒœλ₯Ό 전달
μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ°œμƒν•œ μ΄λ²€νŠΈμ— μ˜ν•΄μ„œ λ‹€λ₯Έ λ£¨νŠΈμ— μžˆλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ³€ν™”λ₯Ό λΆˆλŸ¬μΌμœΌμΌœμ•Όν•˜λŠ” μƒνƒœμΌ 경우

How?

μœ„μ— μ œκ°€ 문제둜 μ œμ‹œν–ˆλ˜ 상황듀을 λ¦¬λ•μŠ€λŠ” λ°”κΉ₯μ—μ„œ μƒνƒœκ΄€λ¦¬λ₯Ό ν•  수 μžˆλ„λ‘ λ„μ™€μ€Œ

λ¦¬λ•μŠ€λŠ” μŠ€ν† μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒνƒœλ₯Ό μ»΄ν¬λ„ŒνŠΈ ꡬ쑰 λ°”κΉ₯에 두고 μŠ€ν† μ–΄λΌλŠ” μ€‘κ°„μžλ₯Ό 톡해 μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜κ±°λ‚˜, μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μ „λ‹¬λ°›μœΌλ©° 이루어진닀.

 


About Redux?

κ·Έλ ‡λ‹€λ©΄ 이제 λ¦¬λ•μŠ€κ°€ 무엇이고 μ™œ μ“°λŠ”μ§€ λŒ€λž΅μ μΈ 이해가 됐을것이닀.

λ‹€μ‹œ λ¦¬λ•μŠ€μ— λŒ€ν•΄μ„œ μ’€ 더 깊이 이해해보도둝 ν•˜μž!

μ›λž˜ ν”„λ‘ νŠΈμ—”λ“œ μƒνƒœκ³„μ—” MVC νŒ¨ν„΄μ΄ λŒ€μ„Έμ˜€λ‹€κ³ ν•œλ‹€.

λ‹€λ“€ κ°œλ°œκ³΅λΆ€λ₯Ό ν•˜λ©΄μ„œ MVCνŒ¨ν„΄μ— λŒ€ν•΄μ„œ 많이 듀어봀을거라고 μƒκ°λœλ‹€.

 

MVC νŒ¨ν„΄μ€ μœ„μ˜ κ΅¬μ‘°λ„μ²˜λŸΌ λ°μ΄ν„°μ˜ μ–‘λ°©ν–₯의 흐름을 가지고 μžˆλ‹€.

ν•˜μ§€λ§Œ, μ΄λŸ¬ν•œ 흐름은 데이터에 λ³€ν™”κ°€ κ°€ν•΄μ‘Œμ„ λ•Œ λ³€ν™”κ°€ μ–‘μͺ½μœΌλ‘œ μΌμ–΄λ‚˜κΈ° λ•Œλ¬Έμ— 였히렀 λ³΅μž‘ν•¨μ„ λΆˆλŸ¬μ˜¨λ‹€. 

이 점을 λ³΄μ™„ν•΄μ„œ λ‚˜μ˜¨ 것이 λ°”λ‘œ Flux!

 

FluxλŠ” 데이터가 단방ν–₯으둜 ν˜λŸ¬κ°€λŠ” 흐름을 가지고 μžˆλ‹€. 일정 μž₯μ†Œμ—μ„œλ§Œ 데이터λ₯Ό λ³€ν™”μ‹œν‚¬μˆ˜ 있기 λ•Œλ¬Έμ— μ½”λ“œνŒŒμ•…μ— 더 μš©μ΄ν•˜λ‹€λŠ” μž₯점을 가지고 있고, λ¦¬μ•‘νŠΈμ—μ„œ 이런 νŒ¨ν„΄μ„ 지ν–₯ν•˜κ³  μžˆλ‹€.

 

ReduxλŠ” Fluxλ₯Ό 기반으둜 ν•˜κΈ° λ•Œλ¬Έμ— 전체적인 νŒ¨ν„΄μ€ λ™μΌν•˜λ‹€.

μƒνƒœκ°’μ€ Storeμ—μ„œ κ΄€λ¦¬λ˜κ³ , Reducerλ₯Ό ν†΅ν•΄μ„œλ§Œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό 받을 수 μžˆλŠ” ꡬ쑰이닀.

 

Reduxλ₯Ό μ‚¬μš©ν•  λ•Œ 3가지 κ·œμΉ™

  1. 단일 μŠ€ν† μ–΄ μ‚¬μš©
    ν•˜λ‚˜μ˜ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ—λŠ” ν•˜λ‚˜μ˜ μŠ€ν† μ–΄λ§Œ κ°€λŠ₯!
    μ•±μ˜ λͺ¨λ“  μƒνƒœλŠ” ν•œ μž₯μ†Œ(store)에 μ €μž₯
  2. μƒνƒœλŠ” 무쑰건 읽기 μ „μš©
    λΆˆλ³€μ„±μœ μ§€λ₯Ό μœ„ν•΄μ„œ μ•‘μ…˜μ„ ν†΅ν•΄μ„œλ§Œ λ³€κ²½ν•  수 μžˆλ„λ‘ ν•œλ‹€.
  3. λ¦¬λ“€μ„œλŠ” μˆœμˆ˜ν•œ ν•¨μˆ˜μ΄μ–΄μ•Όν•¨
    λ™μΌν•œ μž…λ ₯을 λ°›μ•˜μ„ λ•Œ μ–Έμ œλ‚˜ λ™μΌν•œ 좜λ ₯을 λ‚΄λŠ” ν•¨μˆ˜ 
    Math.random()μ΄λ‚˜ λ„€νŠΈμ›Œν¬μ˜ μš”μ²­μ„ ν•˜λŠ” μž‘μ—…κ³Ό 같은 ν•¨μˆ˜ μ‚¬μš©X

λ¦¬λ•μŠ€ κ°œλ…

Action μ•‘μ…˜

μƒνƒœμ— μ–΄λ– ν•œ λ³€ν™”κ°€ ν•„μš”ν•˜λ©΄ μ•‘μ…˜ λ°œμƒ!

ν•˜λ‚˜μ˜ 객체둜 ν‘œν˜„

μ•‘μ…˜κ°μ²΄λŠ” λ°˜λ“œμ‹œ typeν•„λ“œλ₯Ό 가지고 μžˆμ–΄μ•Όν•œλ‹€.

{
  type: "ADD_TODO",
  data: {
    id: 0,
    text: "redux"
  }
}

μ•‘μ…˜μƒμ„±ν•¨μˆ˜

μ•‘μ…˜ μƒμ„±ν•¨μˆ˜λŠ” μ•‘μ…˜ 객체λ₯Ό λ§Œλ“€μ–΄ μ£ΌλŠ” ν•¨μˆ˜

function addTodo(data) {
  return {
    type: "ADD_TODO",
    data
  };
}

//ν™”μ‚΄ν‘œν•¨μˆ˜
const changeInput = text => ({
	type: 'CHANGE_INPUT',
    text
 });

λ³€ν™”κ°€ 일어날 λ•Œλ§ˆλ‹€ μ•‘μ…˜κ°μ²΄λ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”λ° 맀번 μ•‘μ…˜ 객체λ₯Ό μž‘μ„±ν•˜κΈ° 번거둭기 λ•Œλ¬Έμ— ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄μ„œ κ΄€λ¦¬ν•œλ‹€.

 

Reducer λ¦¬λ“€μ„œ

λ¦¬λ“€μ„œλŠ” λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” ν•¨μˆ˜

μ•‘μ…˜ λ§Œλ“€κΈ° -> λ³€ν™” -> μ•‘μ…˜ λ°œμƒ -> λ¦¬λ“€μ„œκ°€ ν˜„μž¬μƒνƒœμ™€ 전달받은 μ•‘μ…˜κ°μ²΄λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›μŒ -> 두값을 μ°Έκ³ ν•΄μ„œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜

function reducer(state, action) {
  ...
  return alteredState;
}

 

Store μŠ€ν† μ–΄

ν”„λ‘œμ νŠΈμ— λ¦¬λ•μŠ€λ₯Ό μ μš©ν•˜κΈ° μœ„ν•΄μ„œ μŠ€ν† μ–΄λ₯Ό λ§Œλ“ λ‹€. 

1ν”„λ‘œμ νŠΈ 1μŠ€ν† μ–΄

μŠ€ν† μ–΄ μ•ˆμ— ν˜„μž¬ μ•± μƒνƒœμ™€ λ¦¬λ“€μ„œκ°€ λ“€μ–΄μžˆκ³ , 그리고 λͺ‡κ°€μ§€μ˜ λ‚΄μž₯ν•¨μˆ˜λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€.

 

Subscribe ꡬ독

μŠ€ν† μ–΄μ˜ λ‚΄μž₯ν•¨μˆ˜ 쀑 ν•˜λ‚˜

κ΅¬λ…ν•¨μˆ˜μ•ˆμ— λ¦¬μŠ€ν„° ν•¨μˆ˜λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ„£μ–΄μ„œ 호좜 -> ν•¨μˆ˜κ°€ μ•‘μ…˜μ΄ λ””μŠ€νŽ˜μΉ˜λΌμ„œ μ—…λ°μ΄νŠΈλ λ•Œλ§ˆλ‹€ 호좜됨

const listener = () => {
	console.log('μƒνƒœκ°€ μ—…λ°μ΄νŠΈλ¨');
}
const unsubscribe = store.subscribe(listener);

unsubscribe(); //μΆ”ν›„ ꡬ독을 λΉ„ν™œμ„±ν™”ν• λ•Œ ν•¨μˆ˜ 호좜

 

Dispatch λ””μŠ€νŒ¨μΉ˜

λ””μŠ€νŒ¨μΉ˜λŠ” μŠ€ν† μ–΄μ˜ λ‚΄μž₯ ν•¨μˆ˜ 쀑 ν•˜λ‚˜μ΄λ‹€.

μ•‘μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” 것!

λ””μŠ€νŒ¨μΉ˜κ°€ μ•‘μ…˜μ„ λ°œμƒμ‹œμΌœ μŠ€ν† μ–΄μ—κ²Œ μƒνƒœλ³€ν™”κ°€ ν•„μš”ν•˜λ‹€κ³  μ•Œλ¦Ό

λ””μŠ€νŒ¨μΉ˜κ°€ 호좜되면 μŠ€ν† μ–΄λŠ” λ¦¬λ“€μ„œ ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œμΌœμ„œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄ μ€€λ‹€.

 


μ°Έκ³ 

λ¦¬μ•‘νŠΈλ₯Ό λ‹€λ£¨λŠ” 기술

https://velog.io/@j35148/Redux-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

https://velog.io/@youthfulhps/What-is-Redux-and-why-use-it

 

 

 

728x90