Skip to content

Latest commit

ย 

History

History
96 lines (65 loc) ยท 4.5 KB

File metadata and controls

96 lines (65 loc) ยท 4.5 KB

Context API

context api๋ž€?

react๋Š” 16.3 ๋ฒ„์ „๋ถ€ํ„ฐ ์ •์‹์ ์œผ๋กœ context api (opens new window)๋ฅผ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ€๋ชจ์™€ ์ž์‹๊ฐ„ props๋ฅผ ๋‚ ๋ ค state๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ๊ฒƒ๊ณผ๋Š” ๋‹ฌ๋ฆฌ context api๋Š” ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ฐ„๊ฒฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฑด๋„ˆ๋„๊ณ  ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ state, function์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์–ธ์ œ ์“ฐ๋Š”๊ฐ€

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฆฌ์•กํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋ณธ ์›์น™์€ ๋‹จ๋ฐฉํ–ฅ์„ฑ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ง์€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

๋‹จ๋ฐฉํ–ฅ์„ฑ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ „์„ฑ์„ ๋†’์ด๊ณ  ํ๋ฆ„์„ ๋‹จ์ˆœํ™”ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜์ง€๋งŒ ๋–„๋•Œ๋กœ ๋„ˆ๋ฌด ๋งŽ์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ์ ์„ ์•ผ๊ธฐํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด 5๋‹จ๊ณ„ ์•„๋ž˜์— ์œ„์น˜ํ•œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์•ผ ํ•œ๋‹ค๋ฉด, ์ค‘๊ฐ„์— 4๊ฐœ์˜ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„์ง€๋ผ๋„ props๋ฅผ ๊ณ„์†ํ•ด์„œ ๋„˜๊ฒจ์ค˜์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ˜•์ œ ๊ด€๊ณ„๋‚˜ ํŠน์ • ๋ฒ”์œ„ ์•ˆ์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋ณต์žกํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ์ž˜ ์„ค๊ณ„ํ•˜๊ณ  ํ•ฉ์„ฑ์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ„์†ํ•ด์„œ ๋„˜๊ฒจ์ค˜์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ์•ˆ๋งŒ๋“œ๋Š” ๊ฒƒ์ด 1์˜ต์…˜์ด์ง€๋งŒ, ํ•ด๋‹น ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ์ด ์•ˆ๋  ๋•Œ๋Š” Context API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์‚ฌ์šฉ๋ฒ•

1.createContext

Context API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๊ณต์œ ํ•  Context๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. Context๋Š” createContext ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const UserContext = createContext(null);
  • createContext ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด Context ๊ฐ์ฒด๊ฐ€ ๋ฆฌํ„ด๋ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” defaultValue๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ defaultValue๋Š” Context Value์˜ ์ดˆ๊ธฐ๊ฐ’์ด ์•„๋‹Œ, ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ Context์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ Provider๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋  ๊ฐ’์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


2.Provider

๋งŒ๋“ค์–ด์ง„ Context๋ฅผ ํ†ตํ•ด์„œ ํŠน์ •ํ•œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Provider ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Context ๊ฐ์ฒด์—๋Š” Provider๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

Provider ์ปดํฌ๋„ŒํŠธ๋Š” value๋ผ๋Š” props์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, value์— ํ• ๋‹น๋œ ๊ฐ’์„ Provider ์ปดํฌ๋„ŒํŠธ ํ•˜์œ„์— ์žˆ๋Š” ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋“  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

const UserContext = createContext(null);

const user = {name: "mhh"};

<UserContext.Provider value={user}>
	<Child />
</UserContext.Provider>

3.useContext

Class ์ปดํฌ๋„ŒํŠธ์—์„œ Context๋ฅผ ํ†ตํ•ด ๊ณต์œ ๋œ ๊ฐ’์— ์ ‘๊ทผํ•˜๋ ค๋ฉด, Consumer๋ผ๋Š” ๋‹ค์†Œ ๋ณต์žกํ•œ ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” useContext๋ผ๋Š” ๋‚ด์žฅ Hook์„ ์ด์šฉํ•ด Context Value์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const UserContext = createContext(null);

const user = {name: "mhh"};

<UserContext.Provider value={user}>
	<Child />
</UserContext.Provider>


function Child() {
	const user = useContext(UserContext);
	
	return <h1>{user.name}</h1>
}

Context vs Redux

  1. Context ์™€ Redux ๋Š” ๊ฐ™์€ ์ผ์„ ํ•˜๋‚˜?

    ๋‘˜์€ ๋‹ค๋ฅธ ๋„๊ตฌ์ด๋ฉฐ, ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  2. Context ๋Š” ์ƒํƒœ๊ด€๋ฆฌ ๋„๊ตฌ์ธ๊ฐ€?

    ์•„๋‹ˆ๋‹ค. Context API ๋Š” ๋‹จ์ง€ ์ข…์†์„ฑ ์ฃผ์ž…์˜ ํ•œ ํ˜•ํƒœ์ผ๋ฟ ์•„๋ฌด๊ฒƒ๋„ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ƒํƒœ๊ด€๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ useState ์™€ useReducer ๋ฅผ ํ†ตํ•ด ์ผ์–ด๋‚œ๋‹ค.

  3. useReducer ๋Š” Redux ์˜ ๋Œ€์ฒดํ’ˆ์ธ๊ฐ€?

    ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ์œ ์‚ฌํ•œ ๋ถ€๋ถ„๋“ค์ด ์žˆ์ง€๋งŒ ๊ธฐ๋Šฅ์—๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  4. ์–ธ์ œ Context ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜?

    props drilling ์„ ํ”ผํ•˜๊ณ ์ž ํ•  ๋•Œ

  5. ์–ธ์ œ Context ์™€ useReducer ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜?

    ํŠน์ • ์ปดํฌ๋„ŒํŠธ์—์„œ ์–ด๋А์ •๋„ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ๊ฒฝ์šฐ

  6. Redux ๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋‚˜

  • ์—ฌ๋Ÿฌ ์œ„์น˜์— ๋งŽ์€ ์–‘์˜ ์ƒํƒœ ๊ฐ’์ด ์กด์žฌ ํ•  ๋•Œ
  • ์—…๋ฐ์ดํŠธ ๋กœ์ง์ด ๋ณต์žก ํ•  ๋•Œ
  • ๊ฑฐ๋Œ€ํ•œ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด ์ž‘์—… ํ•  ๋•Œ
  • ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ๊ฐํ™”๊ฐ€ ํ•„์š” ํ•  ๋•Œ
  • ์‚ฌ์ด๋“œ์ดํŽ™ํŠธ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜, ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™”๋“ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋” ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด ํ•„์š” ํ•  ๋•Œ

์ฐธ๊ณ 

https://olaf-go.medium.com/context-api-vs-redux-e8a53df99b8