React

[λ¦¬μ•‘νŠΈ]λ¦¬λ•μŠ€(Redux) λŠ” λ¬΄μ—‡μΌκΉŒ? | λ¦¬λ•μŠ€λ₯Ό μ™œ μ‚¬μš©ν• κΉŒ?

ruby_s 2021. 12. 22. 20:39
728x90
λ°˜μ‘ν˜•
SMALL

πŸ€” λ¦¬λ•μŠ€λž€?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μƒνƒœλ₯Ό 효율적으둜 관리할 수 있게 λ„μ™€μ£ΌλŠ” 도ꡬ이닀.
λ³΅μž‘ν•œ μƒνƒœ 관리가 μ΄λ£¨μ–΄μ§€λŠ” SPA(Single Page Application)μ—μ„œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€.
λ¦¬λ•μŠ€λŠ” λ¦¬μ•‘νŠΈ 뿐만 μ•„λ‹ˆλΌ jQuery, Angular 등을 μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.
λ‚˜λŠ” λ¦¬μ•‘νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” λ¦¬λ•μŠ€μ— λŒ€ν•΄ μ•Œμ•„λ³Ό 것이닀 !

λ¦¬μ•‘νŠΈμ˜ 데이터 흐름은 단방ν–₯이기 λ•Œλ¬Έμ—, λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ— μ‘΄μž¬ν•˜λŠ” μžμ‹ μ»΄ν¬λ„ŒνŠΈλ“€μ€ λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ₯Ό props둜 μ „λ‹¬λ°›κ²Œ λœλ‹€.
λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœκ°’μ΄ λ³€ν•˜κ²Œ 되면, μžμ‹ μ»΄ν¬λ„ŒνŠΈλŠ” λ³€ν™”λœ μƒνƒœμ— 맞게 dataλ‚˜ uiλ₯Ό λ³€κ²½ν•œλ‹€. 즉, λ¦¬λžœλ”λ§μ„ ν•œλ‹€.

μ—¬κΈ°μ„œ! μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€μŒκ³Ό 같은 μƒν™©μ—μ„œ λ¦¬λžœλ”λ§ λœλ‹€.

1. μžμ‹ μ˜ μƒνƒœ(state)값이 변경될 λ•Œ
2. λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦¬λžœλ”λ§λ  λ•Œ
3. μžμ‹ μ΄ 전달받은 props값이 변경될 λ•Œ
4. κ°•μ œ μ—…λ°μ΄νŠΈ ν•¨μˆ˜κ°€ 싀행될 λ•Œ

즉, μœ„μ™€ 같은 μƒν™©μ—μ„œ λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœκ°’μ΄ λ³€ν•œλ‹€λ©΄, λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈλŠ” λ¦¬λžœλ”λ§ 될 것이고, μžμ‹ μ»΄ν¬λ„ŒνŠΈ λ˜ν•œ λ¦¬λžœλ”λ§ λœλ‹€.


πŸ” Reduxλ₯Ό μ“°λŠ” 이유

1. λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλ“€μ΄ props문법 없이 stateλ₯Ό 직접 κΊΌλ‚΄μ“Έ 수 있음 -> λΆ€λͺ¨ μžμ‹ κ°„μ˜ 데이터 μ „λ‹¬μ˜ νŽΈλ¦¬μ„±μ„ μœ„ν•΄
2. μƒνƒœ(state) κ΄€λ¦¬μ˜ 용이 -> storeμ•ˆμ— stateμˆ˜μ • 방법을 미리 μ •μ˜ν•΄λ‘”λ‹€. μ»΄ν¬λ„ŒνŠΈλ“€μ€ 직접 stateλ₯Ό 직접 μˆ˜μ •ν•˜μ§€ μ•Šκ³  μˆ˜μ • μš”μ²­λ§Œ λ³΄λ‚΄μ„œ κ·Έλƒ₯ 가져와쓰면 λœλ‹€.

πŸ’‘ μž₯점

버그가 일어났을 λ•Œ 좔적이 쉬움. 버그가 생기면 범인은 무쑰건 store.jsμž„.

 

μ—¬κΈ°μ„œ, μžμ‹μ€ λΆ€λͺ¨μ˜ μƒνƒœλ₯Ό 막 λ³€κ²½ν•  수 μ—†λ‹€. props문법을 톡해 전달받은 μƒνƒœλ§Œμ„ λ³€κ²½ν•  수 μžˆλ‹€.
λ”°λΌμ„œ, μ»΄ν¬λ„ŒνŠΈκ°€ 100개 μ€‘μ²©ν•΄μ„œ μžˆλ‹€λ©΄ stateλ₯Ό 전달해주기 μœ„ν•΄ μ—„μ²­λ‚˜κ²Œ λ§Žμ€ props문법을 μ‚¬μš©ν•΄μ•Όν•œλ‹€.
λ¦¬λ•μŠ€λ₯Ό μ„€μΉ˜ν•˜λ©΄ 이 μ•ˆμ— μƒνƒœλ“€μ„ λ‹€ μ €μž₯해두어 μ»΄ν¬λ„ŒνŠΈκ°€ ν•„μš”ν•  λ•Œ κΊΌλ‚΄μ“Έ 수 μžˆλ‹€.

μ„€μΉ˜

npm install redux

μ„ΈνŒ… (이해할 ν•„μš” X, 방법일 뿐)

: λͺΈλ¬΄κ²Œ 증가λ₯Ό 예둜 λ“€μ–΄ μ„€λͺ…ν•˜κ² λ‹€

import { Provider } from 'react-redux'
import { createStore } from 'redux'

function reducer(state = 100, action){
  return state;
}

let store = createStore(reducer);

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

 

πŸ”¨ μ»΄ν¬λ„ŒνŠΈμ—μ„œ store에 있던 stateλ₯Ό μ“°λŠ” 방법

: useSelector둜 λ¦¬λ•μŠ€μ˜ stateλ₯Ό μ‘°νšŒν•œλ‹€.

function App(){
  const κΊΌλ‚΄μ˜¨κ±° = useSelect((state) => state);
}

 

index.js
: store에 state μˆ˜μ •λ°©λ²•μ„ 미리 μ •μ˜ν•œλ‹€.

function reducer(state = 체쀑, action){
  switch (action.type) {
    case '증가':
      return state + 1
    case 'κ°μ†Œ':
      return state - 1
    default:
      return state
  }
}

 

μ»΄ν¬λ„ŒνŠΈμ—μ„œ state μˆ˜μ • μš”μ²­ν•˜λŠ” 법

: dispatch μ‚¬μš©

const dispatch = useDispatch();
...
return (
  <button onClick={()=>{ dispatch({type: '증가'}) }}>λ”ν•˜κΈ°</button>
)

ν΄λ¦­λ§ˆλ‹€ 1μ”© μ¦κ°€ν•˜κ²Œ λœλ‹€.

 

Vuexλž‘ 같은 κ°œλ…μœΌλ‘œ μƒκ°ν•˜λ©΄ λœλ‹€ !

 

κ³΅μ‹λ¬Έμ„œ

https://ko.redux.js.org/introduction/getting-started/

 

Redux μ‹œμž‘ν•˜κΈ° | Redux

μ†Œκ°œ > μ‹œμž‘ν•˜κΈ°: Reduxλ₯Ό 배우고 μ‚¬μš©ν•˜κΈ° μœ„ν•œ 자료

ko.redux.js.org

 

728x90
λ°˜μ‘ν˜•
LIST