dew_dew
hELLO! πŸ‘‹πŸ»
dew_dew

λΈ”λ‘œκ·Έ 메뉴

  • GitHub
  • All (56)
    • Projects (3)
    • πŸ”₯ Trouble Shooting (9)
    • TIL | WIL (11)
    • React (10)
    • Next.js (2)
    • JavaScript (14)
    • TypeScript (1)
    • Algorithm (1)
    • etc. (5)
전체 방문자
였늘
μ–΄μ œ

인기 κΈ€

졜근 λŒ“κΈ€

hELLO Β· Designed By μ •μƒμš°.
dew_dew

hELLO! πŸ‘‹πŸ»

React

React μƒνƒœ 관리 비ꡐ Redux & React Query & SWR

2022. 9. 30. 23:39

μƒνƒœ 관리에 λŒ€ν•œ κ³ λ―Ό

ν”„λ‘œμ νŠΈμ˜ λŒ“κΈ€ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λ˜ 쀑, μŠ΅κ΄€μ μœΌλ‘œ μ‚¬μš©ν–ˆλ˜ λ¦¬λ•μŠ€ μ½”λ“œλ₯Ό κ±·μ–΄λ‚΄κ³  λ‚˜λ‹ˆ μƒˆλ‘œμš΄ λ¬Έμ œμ μ„ λ°œκ²¬ν–ˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€ 생성, μ—…λ°μ΄νŠΈ, μ‚­μ œμ‹œ μ„œλ²„μ— API λ₯Ό μš”μ²­ν•˜κ³  응닡 값을 λ°›μ•„ μ˜€κΈ°κΉŒμ§€μ˜ μ‹œκ°„μ΄ κ½€λ‚˜(?) κΈΈλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

응닡값에 따라 성곡 μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜κ³  μΆ”κ°€(μˆ˜μ •,μ‚­μ œ) 된 λŒ“κΈ€μ„ 보여주기 λ•Œλ¬Έμ— 이 뢀뢄은 μ–΄μ©” 수 μ—†λŠ” λΆ€λΆ„μ΄λΌλŠ” 생각이 λ“€μ—ˆμ§€λ§Œ..? μˆœκ°„, λ‹€λ₯Έ μ„œλΉ„μŠ€λ“€μ€ μ–΄λ–»κ²Œ μ‹€μ‹œκ°„μœΌλ‘œ λ°˜μ‘ν•˜μ§€?! λΌλŠ” 의문점이 λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

 

μ°Ύμ•„ λ³΄λ‹ˆ, ν•΄κ²° 방법은 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μš”μ²­μ΄ μ„±κ³΅ν–ˆμ„ 것이라 μ˜ˆμƒν•˜κ³  값을 미리 보여주고! κ·Έ λ‹€μŒ μ„œλ²„μ—μ„œ 응닡 값을 λ°›μ•˜μ„ λ•Œ, μ‹€νŒ¨ν–ˆλ‹€λ©΄ 값을 거둬 λ“€μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€.

μ €λŠ” 이 방법을 ν™œμš©ν•΄μ•Ό κ² λ‹€λŠ” 생각이 λ“€μ—ˆκ³  ν˜„ ν”„λ‘œμ νŠΈμ— 잘 λ§žλŠ” 라이브러리λ₯Ό μ„ νƒν•˜κΈ° μœ„ν•΄ κ³΅λΆ€ν•˜λ©° 이 글을 μ”λ‹ˆλ‹€.

 

μ°Έκ³ ν•œ 링크듀

https://fe-developers.kakaoent.com/2022/220224-data-fetching-libs/

 

 

μƒνƒœκ΄€λ¦¬κ°€ μ™œ μ€‘μš”ν•΄ μ‘Œμ„κΉŒ?

UI/UX 의 μ€‘μš”μ„±κ³Ό ν•¨κ»˜ ν”„λ‘œλ•νŠΈ 규λͺ¨κ°€ 많이 컀지고 FE μ—μ„œ μˆ˜ν–‰ν•˜λŠ” 역할이 λŠ˜μ–΄λ‚¨ -> κ΄€λ¦¬ν•˜λŠ” μƒνƒœκ°€ λ§Žμ•„μ§.

 

μƒνƒœλž€?

  • μ£Όμ–΄μ§„ μ‹œκ°„μ— λŒ€ν•΄ μ‹œμŠ€ν…œμ„ λ‚˜νƒ€λ‚΄λŠ” κ²ƒμœΌλ‘œ μ–Έμ œλ“ μ§€ 변경될 수 있음.
  • λ¬Έμžμ—΄, λ°°μ—΄, 객체 λ“±μ˜ ν˜•νƒœλ‘œ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ €μž₯된 데이터.
  • 개발자 μž…μž₯에선 κ΄€λ¦¬ν•΄μ•Όν•˜λŠ” 데이터듀.

λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈμ—μ„œμ˜ μƒνƒœ

  • Local State: λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” state
  • Global State: Global Store에 μ •μ˜λ˜μ–΄ ν”„λ‘œμ νŠΈ μ–΄λ””μ—μ„œλ‚˜ μ ‘κ·Όν•  수 μžˆλŠ” state
  • Server State: μ„œλ²„λ‘œλΆ€ν„° λ°›μ•„μ˜€λŠ” state

μƒνƒœκ΄€λ¦¬λŠ”?

  • μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜λŠ” 방법에 λŒ€ν•œ 것
  • μƒνƒœλ“€μ€ μ‹œκ°„μ— 따라 변화함
  • React 에선 λ‹¨λ°˜ν–₯ λ°”μΈλ”©μ΄λ―€λ‘œ Props Drilling μ΄μŠˆλ„ 쑴재
  • Redux 와 MobX 같은 라이브러리λ₯Ό ν™œμš©ν•΄ ν•΄κ²°ν•˜κΈ°λ„ 함

λ¦¬λ•μŠ€μ—μ„œ Server State 처리

동기적인 둜직(Global State)μ—μ„œλŠ” μ•‘μ…˜κ³Ό λ¦¬λ“€μ„œλ₯Ό μ§κ΄€μ μœΌλ‘œ μž‘μ„±ν•  수 μžˆμ§€λ§Œ, 비동기 둜직(Server State)을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„  미듀웨어λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€. 비동기 λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” λ―Έλ“€μ›¨μ–΄λŠ” redux-thunk와 redux-saga κ°€ μžˆλ‹€.

 

redux-thunkλŠ” store에 λ˜μ Έμ§„ μ•‘μ…˜μ„ κ°€λ‘œμ±„μ„œ 비동기 λ‘œμ§μ„ μˆ˜ν–‰ν•œ ν›„ μ•‘μ…˜μ„ λ°œμƒ

-> μƒνƒœκ°€ μ–Έμ œ λ°˜μ˜λ˜λŠ”μ§€ μ •ν™•ν•œ μ‹œμ μ„ λͺ¨λ¦„.

redux-saga λŠ” μ½”λ“œκ°€ κΈΈλ‹€. λŒ€μ‹  μ•‘μ…˜μ„ 순수 객체 ν˜•νƒœλ‘œ μ“Έ 수 μžˆλ‹€.

 

React Query & SWR

  • μ„ μ–Έμ μœΌλ‘œ ν”„λ‘œκ·Έλž˜λ° ν•  수 있음(μž₯ν™©ν•˜μ§€ μ•Šμ€ μ½”λ“œ)
  • λ™μΌν•œ API μš”μ²­μ΄ μ—¬λŸ¬ 번 호좜될 경우 ν•œ 번만 μ‹€ν–‰
  • 데이터가 dirty ν•΄μ§„ 경우 μ μ ˆν•œ μ‹œμ μ— μ•Œμ•„μ„œ μ—…λ°μ΄νŠΈ
  • Global State와 Server State의 관심사λ₯Ό 뢄리
import useSWR from "swr";

function Profile() {
  const { data, error } = useSWR("/api/user", fetcher, options);

  if (error) return <div>failed to load</div>;
  if (!data) return <div>loading...</div>;
  return <div>hello {data.name}!</div>;
}
import { useQuery } from "react-query";

const useUser = id => {
  const result = useQuery(`/user/${id}`, fetcher, options);

  return result;
};

function Example() {
  const { isLoading, error, data } = useUser("123");

  if (isLoading) return "Loading...";
  if (error) return "An error has occurred: " + error.message;
  return <div>hello {data.name}!</div>;
}

μ‚¬μš©λ²•μ€ λΉ„μŠ·ν•©λ‹ˆλ‹€. fetcher λŠ” promise λ₯Ό λ¦¬ν„΄ν•˜λŠ” λͺ¨λ“  ν•¨μˆ˜κ°€ 올 수 μžˆμŠ΅λ‹ˆλ‹€.

data fetching 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄, μ‰½κ²Œ 데이터λ₯Ό κ°€μ Έμ˜¬ 수 있고 λ™μΌν•œ μš”μ²­μ„ ν•˜λŠ” μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈκ°€ λ™μ‹œμ— λ Œλ”λ§ λ˜λ”λΌλ„ ν•œ 번만 μš”μ²­ν•©λ‹ˆλ‹€. λ˜ν•œ, λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μ„œλ²„μ— 주기적으둜 polling을 ν•˜λ©΄μ„œ 데이터가 μœ νš¨ν•œμ§€ κ²€μ‚¬ν•˜κ³ , μœ νš¨ν•˜μ§€ μ•ŠμœΌλ©΄ μ—…λ°μ΄νŠΈν•˜μ—¬ 데이터λ₯Ό λ™κΈ°ν™”ν•©λ‹ˆλ‹€

 

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'React' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

λ¦¬μ•‘νŠΈ λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•΄μ„œ..  (0) 2022.10.12
React Redux Toolkit μ‚¬μš©ν•˜κΈ°  (0) 2022.08.29
React Hook μ΄λž€ ?  (0) 2022.08.28
React Life Cycle [ Class component 와 Function component ]  (0) 2022.08.28
React Ref 와 Dom  (1) 2022.08.27
    dew_dew
    dew_dew
    κ°œλ°œμžκ°€ λ˜λŠ” μ—¬μ • 기둝

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”