[React]08. λ¦¬μ•‘νŠΈ Redux

μ†‘μš°λ“ Β·2021λ…„ 6μ›” 27일
0

React

λͺ©λ‘ 보기
8/23
post-thumbnail

πŸ’š λ¦¬λ•μŠ€(Redux)

효율적으둜 μƒνƒœκ΄€λ¦¬λ₯Ό 해쀄 수 μžˆλŠ” 라이브러리

λ¦¬λ•μŠ€(Redux)λŠ” λ¦¬μ•‘νŠΈμ—λ§Œ μ’…μ†λ˜λŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹ˆμ—μš”! κ·Έλž˜μ„œ λ‹€λ₯Έ UI λΌμ΄λΈŒλŸ¬λ¦¬λ‚˜ ν”„λ ˆμž„μ›Œν¬μ™€λ„ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’š λ¦¬λ•μŠ€(Redux) μ£Όμš” κ°œλ…

πŸ’› μ•‘μ…˜(Action)

μƒνƒœμ˜ λ³€ν™”κ°€ ν•„μš”ν•  λ•Œ λ°œμƒ

μ•‘μ…˜(action)은 type을 ν•„μˆ˜ μ†μ„±μœΌλ‘œ 가지고 μžˆμ–΄μ•Ό ν•˜λŠ”λ°μš”! 이 μ™Έμ˜ λ‹€λ₯Έ 속성듀은 자유둭게 좔가해쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜ μ½”λ“œμ—μ„œλŠ” typeκ³Ό todo객체λ₯Ό λ§Œλ“€μ–΄ μΆ”κ°€ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

{
  type: "ADD_TODO",
  todo: {
    id: 0,
    text: "λ¦¬λ•μŠ€ 곡뢀 μ‹œμž‘!"
  }
}

πŸ’› μ•‘μ…˜ 생성 ν•¨μˆ˜(Action Creator)

μ•‘μ…˜(Action)을 μƒμ„±ν•΄μ£ΌλŠ” ν•¨μˆ˜

μ•‘μ…˜ 생성 ν•¨μˆ˜(Action Creator)λŠ” νŒŒλΌλ―Έν„°λ₯Ό λ°›μ•„μ„œ μ•‘μ…˜ 객체 ν˜•νƒœλ‘œ λ§Œλ“€μ–΄μ£ΌλŠ” 일을 ν•˜λŠ”λ°μš”.

μ•„λž˜ AddTodoλΌλŠ” μ•‘μ…˜ 생성 ν•¨μˆ˜λŠ” todoλ§€κ°œλ³€μˆ˜λ₯Ό λ°›μ•„μ„œ μ•‘μ…˜μ„ μƒμ„±ν•˜μ—¬ μ€λ‹ˆλ‹€.

export const AddTodo = (todo) => {

	return {
    	type : 'ADD_TODO',
        todo
    };
};

μ•‘μ…˜ 생성 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³ λ„ μ•‘μ…˜μ„ λ°œμƒμ‹œν‚¬ λ•Œλ§ˆλ‹€ μ•‘μ…˜ 객체λ₯Ό 직접 μž‘μ„±ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ’› λ¦¬λ“€μ„œ(Reducer)

λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” ν•¨μˆ˜
state와 action 두 개의 인자 λ°›μŒ

λ¦¬λ“€μ„œ(Reducer)λŠ” 전달받은 인자λ₯Ό μƒνƒœ(state)와 μ•‘μ…˜(action)을 μ°Έκ³ ν•΄ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ°˜ν™˜ν•΄μ€λ‹ˆλ‹€.

μ•„λž˜ μ½”λ“œλŠ” TodoReducerμ½”λ“œμΈλ°μš”! μƒνƒœ(state)와 μ•‘μ…˜(action)을 λ°›μ•„ μ•‘μ…˜ νƒ€μž…μ— 따라 ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

function TodoReducer(state, action) {
  switch (action.type) {
    case 'ADD_TODO':
      return {
        ...state,
        todos: state.todos.concat({ id: id++,text: payload.text})
      };
    default:
      return state;
  }
}

πŸ’› μŠ€ν† μ–΄(Store)

ν˜„μž¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μƒνƒœμ™€ λ¦¬λ“€μ„œ(Reducer) μŠ€ν† μ–΄μ˜ λ‚΄μž₯ ν•¨μˆ˜λ₯Ό 포함

λ¦¬λ•μŠ€(Redux)μ—μ„œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν•˜λ‚˜λ‹Ή ν•˜λ‚˜μ˜ μŠ€ν† μ–΄(Store)λ₯Ό λ§Œλ“€ 수 μžˆλŠ”λ°μš”!

πŸ’› λ””μŠ€νŒ¨μΉ˜(Dispatch)

μŠ€ν† μ–΄(Store)의 λ‚΄μž₯ ν•¨μˆ˜ 쀑 ν•˜λ‚˜
μ•‘μ…˜μ„ λ°œμƒμ‹œν‚€λŠ” μ—­ν• 

λ””μŠ€νŒ¨μΉ˜(Dispatch)μ—λŠ” μ•‘μ…˜(Action)을 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•©λ‹ˆλ‹€.

πŸ’› ꡬ독(Subscribe)

μŠ€ν† μ–΄(Store)의 λ‚΄μž₯ ν•¨μˆ˜
ν•¨μˆ˜ ν˜•νƒœμ˜ 값을 ν•¨μˆ˜μ˜ 인자둜 λ°›μŒ

ꡬ독(Subscribe)에 νŠΉμ • ν•¨μˆ˜λ₯Ό 전달해주면, μ•‘μ…˜μ΄ λ””μŠ€νŒ¨μΉ˜(Dispatch)될 λ•Œλ§ˆλ‹€ 전달해쀀 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄μ€λ‹ˆλ‹€.

πŸ’š λ¦¬λ•μŠ€(Redux)의 κ·œμΉ™

πŸ’› μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν•˜λ‚˜λ‹Ή μŠ€ν† μ–΄λŠ” ν•˜λ‚˜!

μ—¬λŸ¬κ°œμ˜ μŠ€ν† μ–΄ λ§Œλ“€μ–΄ μ‚¬μš©ν•  수 μžˆμ§€λ§Œ ꢌμž₯λ˜μ§€ μ•ŠλŠ” 방법이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μŠ€ν† μ–΄λŠ” ν•˜λ‚˜λ§Œ μ‚¬μš©ν•˜λŠ”κ²Œ μ’‹μŠ΅λ‹ˆλ‹€.

πŸ’› μƒνƒœλŠ” 읽기 μ „μš©!

기쑴의 μƒνƒœλŠ” μœ μ§€ν•˜κ³  μƒˆλ‘œμš΄ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•΄μ£ΌλŠ” 방식을 μ‚¬μš©ν•¨μœΌλ‘œμ¨ 개발자 도ꡬλ₯Ό 톡해 Undo/Redoκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. μ ˆλŒ€λ‘œ 직접 μˆ˜μ •ν•˜μ§€ 말아야 ν•©λ‹ˆλ‹€.

πŸ’› λ¦¬λ“€μ„œλŠ” μˆœμˆ˜ν•¨μˆ˜!

순수 ν•¨μˆ˜μ˜ λ°˜ν™˜ 값은 전달받은 νŒŒλΌλ―Έν„°μ—λ§Œ μ˜μ‘΄ν•΄μ•Ό ν•˜λ©°, 같은 νŒŒλΌλ―Έν„°μ˜ 결과값은 항상 동일해야 ν•©λ‹ˆλ‹€. λ¦¬λ“€μ„œ λ˜ν•œ λ˜‘κ°™μ€ νŒŒλΌλ―Έν„°λ₯Ό 전달받아 ν˜ΈμΆœλœλ‹€λ©΄ κ²°κ³Όκ°’μœΌλ‘œ 같은 값을 λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œλŠ” λ¦¬λ•μŠ€λ₯Ό μ μš©ν•œ todolistλ₯Ό λ§Œλ“€μ–΄ 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€!

참고 링크

λ²¨λ‘œνΌνŠΈμ™€ ν•¨κ»˜ν•˜λŠ” λͺ¨λ˜ λ¦¬μ•‘νŠΈ

profile
개발 κΈ°λ‘πŸ’»

0개의 λŒ“κΈ€