๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ ์ค์ฝํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ฑ๋ฅ์ ๊ฐ์ ํ๋ฉฐ, ์ฝ๋ ๊ตฌ์ฑ์ ํฅ์์ํค๋ React์ experimental_Scope๋ฅผ ํ์ํด ๋ณด์ธ์.
React experimental_Scope: ์ปดํฌ๋ํธ ์ค์ฝํ ๊ด๋ฆฌ์ ๋ํ ์ฌ์ธต ๋ถ์
์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ์ ์ํ ๊ฐ๋ ฅํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ React๋ ๋์์์ด ๋ฐ์ ํ๊ณ ์์ต๋๋ค. ํ์ฌ ์คํ ์ค์ธ ํฅ๋ฏธ๋ก์ด ์ต์ ์ถ๊ฐ ๊ธฐ๋ฅ ์ค ํ๋๋ experimental_Scope์
๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์์๊ฒ ์ปดํฌ๋ํธ ์ค์ฝํ์ ๋ํ ๋ ์ธ๋ถํ๋ ์ ์ด๊ถ์ ์ ๊ณตํ์ฌ ์ ์ฌ์ ์ธ ์ฑ๋ฅ ํฅ์๊ณผ ๋ ๊น๋ํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ด๋์ด๋ด๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด ์ข
ํฉ ๊ฐ์ด๋์์๋ experimental_Scope์ ๋ชฉ์ , ์ฌ์ฉ๋ฒ, ์ด์ ๋ฐ ์ ์ฌ์ ๋จ์ ์ ํ๊ตฌํ๋ฉฐ ๊ทธ ๋ณต์ก์ฑ์ ์์ธํ ์ดํด๋ณผ ๊ฒ์
๋๋ค.
์ปดํฌ๋ํธ ์ค์ฝํ๋ ๋ฌด์์ธ๊ฐ?
experimental_Scope์ ๋ํด ์์๋ณด๊ธฐ ์ ์ "์ปดํฌ๋ํธ ์ค์ฝํ"๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. React์์ ์ปดํฌ๋ํธ์ ์ค์ฝํ๋ ํด๋น ์ปดํฌ๋ํธ๊ฐ ์ ๊ทผํ ์ ์๋ ๋ฐ์ดํฐ์ ํจ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ ํต์ ์ผ๋ก ์ปดํฌ๋ํธ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ๋ props์ React Context API๊ฐ ์ ๊ณตํ๋ ์ปจํ
์คํธ์ ์์กดํ์ฌ ๋ฐ์ดํฐ์ ์ ๊ทผํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ ์๋ํ์ง๋ง, ๊น๊ฒ ์ค์ฒฉ๋ ์ปดํฌ๋ํธ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ณต์กํ ์๋๋ฆฌ์ค์์๋ ํจ์จ์ฑ์ด ๋จ์ด์ง๊ณ ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
์ฌ๋ฌ ๊ณ์ธต์ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ ๋๊ท๋ชจ ์ ์์๊ฑฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ฐํด ๋ด ์๋ค. ์ฌ๋ฌ ๋ ๋ฒจ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํตํด props๋ฅผ ์ ๋ฌํ๋ ๊ฒ(prop drilling)์ ๋ฒ๊ฑฐ๋ก์ธ ์ ์์ผ๋ฉฐ, ํนํ ์ค๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ์ง ์๋ ๊ฒฝ์ฐ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. React Context API๋ ๋ช ์์ ์ธ prop ์ ๋ฌ ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง๋ง, ์ปดํฌ๋ํธ๊ฐ ์ค์ ๋ก ์ฌ์ฉํ์ง ์๋ ์ปจํ ์คํธ ๊ฐ์ ๊ตฌ๋ ํ๋ ๊ฒฝ์ฐ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
experimental_Scope ์๊ฐ
experimental_Scope๋ ์ปดํฌ๋ํธ ์ค์ฝํ๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ์๋ก์ด ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ด์ ๊ฒฉ๋ฆฌ๋ ์ค์ฝํ๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ์
๋ฐ์ดํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ ์ ์ด๋๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฌ ์คํ์ ์ด๋ฉฐ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ก๋์
์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฃผ์ ๊ฐ๋
- ์ค์ฝํ ์ ๊ณต์(Scope Provider): ์๋ก์ด ์ค์ฝํ๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ์ปดํฌ๋ํธ์ ๋๋ค.
- ์ค์ฝํ ์๋น์(Scope Consumer): ํน์ ์ค์ฝํ์์ ๋ฐ์ดํฐ๋ฅผ ์๋นํ๋ ์ปดํฌ๋ํธ์ ๋๋ค.
- ์ค์ฝํ ๊ฐ(Scope Values): ์ค์ฝํ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์ง ๋ฐ์ดํฐ์ ํจ์์ ๋๋ค.
experimental_Scope์ ์๋ ๋ฐฉ์
experimental_Scope์ ๊ธฐ๋ณธ ์์ด๋์ด๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ํน์ ๋ถ๋ถ์ ์ํ ์ ์ฉ ์ค์ฝํ๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค. ์ด ์ค์ฝํ์๋ ํธ๋ฆฌ์ ํด๋น ๋ถ๋ถ ๋ด์ ์๋ ์ปดํฌ๋ํธ๋ง ์ ๊ทผํ ์ ์๋ ํน์ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค. ๋ค์์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฐ๋จํ ์์์
๋๋ค.
// Assuming 'createScope' is available from a React experimental build
const MyScope = createScope();
function MyComponent() {
const [count, setCount] = React.useState(0);
return (
<MyScope.Provider value={{ count, setCount }}>
<ChildComponent />
</MyScope.Provider>
);
}
function ChildComponent() {
const { count, setCount } = MyScope.useContext();
return (
<button onClick={() => setCount(count + 1)}>
Count: {count}
</button>
);
}
์ด ์์์์:
createScope()๋MyScope๋ผ๋ ์๋ก์ด ์ค์ฝํ๋ฅผ ์์ฑํฉ๋๋ค.MyScope.Provider๋ ์์๋ค์๊ฒ ์ค์ฝํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ค์ฝํ ๋ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋valueprop์ ๋ฐ์ต๋๋ค (์ด ๊ฒฝ์ฐcount์setCount).MyScope.useContext()๋ChildComponent์์ ์ค์ฝํ์ ๊ฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํ ์ ์ค์ฝํ์ ๊ฐ์ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
์์ธ ์ค๋ช
- ์ค์ฝํ ์์ฑ:
createScope()ํจ์(์ ํํ ์ด๋ฆ์ ๋ค๋ฅธ ์คํ์ ๋น๋์์ ๋ค๋ฅผ ์ ์์)๋ ์๋กญ๊ณ ๊ณ ์ ํ ์ค์ฝํ๋ฅผ ์์ฑํ๋ ์ญํ ์ ํฉ๋๋ค. ์ด ์ค์ฝํ๋ ํน์ ์ปดํฌ๋ํธ ์๋ธํธ๋ฆฌ ๋ด์์ ๊ณต์ ํ๋ ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ์ปจํ ์ด๋ ์ญํ ์ ํฉ๋๋ค. - ์ค์ฝํ ์ ๊ณต: ์ค์ฝํ ๊ฐ์ฒด์ ์์ฑ์ผ๋ก ์์ฑ๋
Provider์ปดํฌ๋ํธ(์:MyScope.Provider)๋ ์์ ์ปดํฌ๋ํธ๋ค์ด ์ค์ฝํ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.Provider์ปดํฌ๋ํธ์valueprop์ ์ค์ฝํ ๋ด์์ ๊ณต์ ํ๋ ค๋ ๋ฐ์ดํฐ์ ํจ์๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ต๋๋ค. ์ดvalueprop์ React์ ๋ด์ฅ Context API์valueprop๊ณผ ์ ์ฌํ๊ฒ ์๋ํฉ๋๋ค. - ์ค์ฝํ ์๋น:
useContextํ (์ค์ฝํ ๊ฐ์ฒด์ ์์ฑ์ผ๋ก ์ ๊ทผ, ์:MyScope.useContext)์ ์์ ์ปดํฌ๋ํธ๊ฐProvider์ ์ํด ์ ๊ณต๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๊ฒ์Provider์valueprop์ ์ ์๋ ๋ชจ๋ ๊ฐ์ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค.
experimental_Scope ์ฌ์ฉ์ ์ด์
์์ง ์คํ ๋จ๊ณ์ด์ง๋ง, experimental_Scope๋ ๋ช ๊ฐ์ง ์ ์ฌ์ ์ธ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์ฑ๋ฅ ํฅ์: ๊ฒฉ๋ฆฌ๋ ์ค์ฝํ๋ฅผ ์์ฑํจ์ผ๋ก์จ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ค์ผ ์ ์์ต๋๋ค. ์ค์ฝํ์ ๊ฐ์ ์ค์ ๋ก ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ง ํด๋น ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ฆฌ๋ ๋๋ง๋ฉ๋๋ค. ์ด๋ ํนํ ํฌ๊ณ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋นํ ์ฑ๋ฅ ํฅ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- Prop Drilling ๊ฐ์:
experimental_Scope๋ ์ฌ๋ฌ ๋ ๋ฒจ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ํตํด props๋ฅผ ์ ๋ฌํ ํ์๋ฅผ ์์จ ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ๋ ์ ์ ํ ์ค์ฝํ์์ ํ์ํ ๋ฐ์ดํฐ์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. - ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ: ๋ฐ์ดํฐ์ ๋์์ ์ค์ฝํ ๋ด์ ์บก์ํํจ์ผ๋ก์จ ๋ ๋ชจ๋ํ๋๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด ๋ฐ์ดํฐ ํ๋ฆ์ ์ดํดํ๊ณ ์ถ๋ก ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ช
์์ ์ธ ๋ฐ์ดํฐ ์์กด์ฑ:
experimental_Scope๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ ์์กด์ฑ์ด ๋ ๋ช ํํด์ง๋๋ค. ์ด๋ค ์ปดํฌ๋ํธ๊ฐ ์ด๋ค ์ค์ฝํ์ ์์กดํ๋์ง ๋ช ํํด์ ธ ์ฝ๋ ๋๋ฒ๊น ๋ฐ ๋ฆฌํฉํ ๋ง์ด ์ฌ์์ง๋๋ค.
์ ์ฌ์ ๋จ์ ๋ฐ ๊ณ ๋ ค์ฌํญ
์ ์ฌ์ ์ธ ์ด์ ์๋ ๋ถ๊ตฌํ๊ณ , experimental_Scope๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ์ฌ์ ์ธ ๋จ์ ๊ณผ ๊ณ ๋ ค์ฌํญ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ์คํ์ ์ํ: ์คํ์ ๊ธฐ๋ฅ์ด๋ฏ๋ก API๋ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ์ด๋
experimental_Scope๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ์ฝ๋๊ฐ ์ต์ React ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ ๋ ์์ ์ด ํ์ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. - ๋ณต์ก์ฑ ์ฆ๊ฐ: ์ค์ฝํ๋ฅผ ๋์ ํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋ค๋ฅธ ์ถ์ํ ๊ณ์ธต์ด ์ถ๊ฐ๋ฉ๋๋ค. ์ด์ ์ด ์ถ๊ฐ๋ ๋ณต์ก์ฑ์ ์์ํ๋์ง ์ ์คํ๊ฒ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ค์ฝํ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ดํดํ๊ณ ๋๋ฒ๊น ํ๊ธฐ ๋ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
- ํ์ต ๊ณก์ : ๊ฐ๋ฐ์๋ ์๋ก์ด API๋ฅผ ๋ฐฐ์ฐ๊ณ ๊ธฐ์กด์ ์ปดํฌ๋ํธ ์ํ ๋ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐฉ๋ฒ๊ณผ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ์ดํดํด์ผ ํฉ๋๋ค.
- ๋๋ฒ๊น
์ ์ด๋ ค์: ์ค์ฝํ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น
ํ๋ ๊ฒ์ ์ ํต์ ์ธ props ๊ธฐ๋ฐ ์ปดํฌ๋ํธ๋ฅผ ๋๋ฒ๊น
ํ๋ ๊ฒ๋ณด๋ค ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค.
experimental_Scope์ ๋ํ DevTools ์ง์์ด ์ ํ์ ์ผ ์ ์์ต๋๋ค.
experimental_Scope๋ ์ธ์ ์ฌ์ฉํด์ผ ํ ๊น?
experimental_Scope๋ ๋ค์๊ณผ ๊ฐ์ ์๋๋ฆฌ์ค์ ๊ฐ์ฅ ์ ํฉํฉ๋๋ค:
- ์๋นํ prop drilling์ด ์๋ ๊น๊ฒ ์ค์ฒฉ๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๊ฐ ์๋ ๊ฒฝ์ฐ.
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋ ๊ฒฝ์ฐ.
- ํน์ ์ปดํฌ๋ํธ ํ์ ์งํฉ ์ ๋ฐ์ ๊ฑธ์ณ ๋ฐ์ดํฐ์ ๋์์ ๊ณต์ ํด์ผ ํ๋ ๊ฒฝ์ฐ.
- ์ฝ๋์ ๋ชจ๋์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ์ฑ์ ํฅ์์ํค๊ณ ์ถ์ ๊ฒฝ์ฐ.
prop drilling์ด ์ต์ํ๋๊ณ ์ฑ๋ฅ์ด ์ค์ํ์ง ์์ ๊ฐ๋จํ ์ ํ๋ฆฌ์ผ์ด์
์์๋ experimental_Scope ์ฌ์ฉ์ ํผํ์ธ์. ๊ทธ๋ฐ ๊ฒฝ์ฐ์๋ ์ถ๊ฐ๋ ๋ณต์ก์ฑ์ด ์ด์ ๋ณด๋ค ํด ์ ์์ต๋๋ค.
์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
experimental_Scope๋ฅผ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์๋์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ค์ ์์์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ํ ๋ง ๊ด๋ฆฌ
์ฌ๋ฌ ํ
๋ง(์: ๋ผ์ดํธ ๋ชจ๋, ๋คํฌ ๋ชจ๋)๋ฅผ ์ง์ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ฐํด ๋ด
์๋ค. experimental_Scope๋ฅผ ์ฌ์ฉํ์ฌ ํ
๋ง ์ค์ฝํ๋ฅผ ์์ฑํ์ฌ ํ์ฌ ํ
๋ง๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด์ ์ปดํฌ๋ํธ์ ํ
๋ง ๊ด๋ จ ์คํ์ผ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
const ThemeScope = createScope();
function ThemeProvider({ children, theme }) {
return (
<ThemeScope.Provider value={{ theme }}>
{children}
</ThemeScope.Provider>
);
}
function ThemedComponent({ children }) {
const { theme } = ThemeScope.useContext();
const style = {
backgroundColor: theme === 'dark' ? '#333' : '#fff',
color: theme === 'dark' ? '#fff' : '#333',
};
return <div style={style}>{children}</div>;
}
function App() {
const [theme, setTheme] = React.useState('light');
return (
<ThemeProvider theme={theme}>
<button onClick={() => setTheme(theme === 'light' ? 'dark' : 'light')}>
Toggle Theme
</button>
<ThemedComponent>
<h1>My App</h1>
<p>This is a themed component.</p>
</ThemedComponent>
</ThemeProvider>
);
}
์ด ์์ ์์ ThemeProvider ์ปดํฌ๋ํธ๋ ThemeScope๋ฅผ ํตํด ์์๋ค์๊ฒ ํ์ฌ ํ
๋ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ThemedComponent๋ ThemeScope.useContext() ํ
์ ์ฌ์ฉํ์ฌ ํ
๋ง์ ์ ๊ทผํ๊ณ ์ ์ ํ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
์์ 2: ์ฌ์ฉ์ ์ธ์ฆ
experimental_Scope๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ธ์ฆ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ ํน์ ๋ถ๋ถ ๋ด์์ ์ฌ์ฉ์ ์ ๋ณด ๋ฐ ์ธ์ฆ ๊ธฐ๋ฅ์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
const AuthScope = createScope();
function AuthProvider({ children, user, login, logout }) {
return (
<AuthScope.Provider value={{ user, login, logout }}>
{children}
</AuthScope.Provider>
);
}
function ProfileComponent() {
const { user, logout } = AuthScope.useContext();
if (!user) {
return <p>Please log in.</p>;
}
return (
<div>
<h2>Welcome, {user.name}!</h2>
<button onClick={logout}>Logout</button>
</div>
);
}
function App() {
const [user, setUser] = React.useState(null);
const login = (username, password) => {
// Simulate login
if (username === 'user' && password === 'password') {
setUser({ name: 'John Doe' });
}
};
const logout = () => {
setUser(null);
};
return (
<AuthProvider user={user} login={login} logout={logout}>
<ProfileComponent />
</AuthProvider>
);
}
์ด ์์ ์์ AuthProvider ์ปดํฌ๋ํธ๋ AuthScope๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฐ์ฒด, ๋ก๊ทธ์ธ ํจ์, ๋ก๊ทธ์์ ํจ์๋ฅผ ์์๋ค์๊ฒ ์ ๊ณตํฉ๋๋ค. ProfileComponent๋ AuthScope.useContext() ํ
์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ๋ณด์ ์ ๊ทผํ๊ณ ์ฌ์ฉ์์ ํ๋กํ์ ํ์ํฉ๋๋ค.
experimental_Scope ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
experimental_Scope๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์ ์ฌ์ ์ธ ํจ์ ์ ํผํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ธ์:
- ๋๋ฌผ๊ฒ ์ฌ์ฉํ๊ธฐ: ์ค์ฝํ๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ๋ง์ธ์. ์ฑ๋ฅ, ์ฝ๋ ๊ตฌ์ฑ ๋๋ prop drilling ๊ฐ์ ์ธก๋ฉด์์ ๋ช ํํ ์ด์ ์ ์ ๊ณตํ ๋๋ง ์ค์ฝํ๋ฅผ ์์ฑํ์ธ์.
- ์ค์ฝํ๋ฅผ ์๊ฒ ์ ์งํ๊ธฐ: ์ค์ฝํ ๋ด ๊ฐ์ ์๋ฅผ ์ต์ํ์ผ๋ก ์ ์งํ์ธ์. ์ด๋ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ํ์ ์ค์ ๋๋ค.
- ์ค์ฝํ์ ์ค๋ช ์ ์ธ ์ด๋ฆ ๋ถ์ด๊ธฐ: ์ค์ฝํ์ ๋ชฉ์ ์ ๋ช ํํ๊ฒ ๋ํ๋ด๊ธฐ ์ํด ์ค๋ช ์ ์ธ ์ด๋ฆ์ ์ ํํ์ธ์.
- ์ค์ฝํ ๋ฌธ์ํํ๊ธฐ: ์ฝ๋์ ์ฃผ์์ ์ถ๊ฐํ์ฌ ๊ฐ ์ค์ฝํ์ ๋ชฉ์ ๊ณผ ์ ๊ณตํ๋ ๊ฐ์ ์ค๋ช ํ์ธ์.
- ์ ๋ฐ์ดํธ์ ์ ์ํ๊ธฐ: ์ค์ฝํ ๊ฐ์ ๋ณ๊ฒฝ์ด ์ด๋ป๊ฒ ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ๋์ง ์ดํดํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์ต์ ํํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธํ๊ธฐ: ์ฝ๋๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ฌ ์ค์ฝํ๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํ์ธ์.
React Context API์์ ๋น๊ต
experimental_Scope๋ React Context API์ ์ผ๋ถ ์ ์ฌ์ ์ ๊ณต์ ํ์ง๋ง, ์ฃผ์ ์ฐจ์ด์ ๋ ์์ต๋๋ค:
| ๊ธฐ๋ฅ | React Context API | experimental_Scope |
|---|---|---|
| ๋ชฉ์ | ์ ์ญ ์ํ ๊ด๋ฆฌ | ์ปดํฌ๋ํธ๋ณ ์ค์ฝํ ๊ด๋ฆฌ |
| ๋ฆฌ๋ ๋๋ง | ์ปจํ ์คํธ ๊ฐ์ด ๋ณ๊ฒฝ๋ ๋ ๋ชจ๋ ์๋น์๊ฐ ๋ฆฌ๋ ๋๋ง๋จ | ๋ณ๊ฒฝ๋ ๊ฐ์ ์ฌ์ฉํ๋ ์๋น์๋ง ๋ฆฌ๋ ๋๋ง๋จ |
| Prop drilling | Prop drilling์ ์ค์ผ ์ ์์ง๋ง, ์ฌ์ ํ ์ปจํ ์คํธ ์๋น๊ฐ ํ์ํจ | ์ค์ฝํ ๋ด์์ prop drilling์ ์ ๊ฑฐํจ |
| ๋ณต์ก์ฑ | ๋น๊ต์ ์ฌ์ฉํ๊ธฐ ์ฌ์ | ๋ ๋ณต์กํ๋ฉฐ, ์ค์ฝํ ๊ฐ๋ ์ ๋ํ ์ดํด๊ฐ ํ์ํจ |
| ์์ ์ฑ | ์์ ์ ์ธ API | ์คํ์ API, ๋ณ๊ฒฝ๋ ์ ์์ |
์ผ๋ฐ์ ์ผ๋ก React Context API๋ ์ ์ญ ์ ํ๋ฆฌ์ผ์ด์
์ํ ๊ด๋ฆฌ์ ๋ ์ ํฉํ๋ฉฐ, experimental_Scope๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฉ๋ฆฌ๋ ๋ถ๋ถ ๋ด์์ ์ปดํฌ๋ํธ๋ณ ๋ฐ์ดํฐ์ ๋์์ ๊ด๋ฆฌํ๋ ๋ฐ ๋ ์ ํฉํฉ๋๋ค.
experimental_Scope์ ๋ฏธ๋
experimental_Scope์ ๋ฏธ๋๋ ์์ง ๋ถํ์คํฉ๋๋ค. ์คํ์ ๊ธฐ๋ฅ์ผ๋ก์ ์๋นํ ๋ณ๊ฒฝ์ ๊ฒช๊ฑฐ๋ React์์ ์์ ํ ์ ๊ฑฐ๋ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ React ์ ํ๋ฆฌ์ผ์ด์
์ด ๋์ฑ ๋ณต์กํด์ง์ ๋ฐ๋ผ ์ปดํฌ๋ํธ ์ค์ฝํ ๊ด๋ฆฌ์ ๊ธฐ๋ณธ ๊ฐ๋
์ ์ ์ ๋ ์ค์ํด์ง ๊ฒ์
๋๋ค.
experimental_Scope๊ฐ ํฅํ React ๋ฆด๋ฆฌ์ค์์ ์์ ์ ์ธ API๋ก ๋ฐ์ ํ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋๋ React๊ฐ ๋์ผํ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ ์ค์ฝํ ๊ด๋ฆฌ ๋ฉ์ปค๋์ฆ์ ๋์
ํ ์๋ ์์ต๋๋ค.
๊ฒฐ๋ก
experimental_Scope๋ React ์ํ๊ณ์ ํฅ๋ฏธ๋กญ๊ณ ์ ์ฌ์ ์ผ๋ก ๊ฐ์น ์๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ๋ํ๋
๋๋ค. ์์ง ์คํ ๋จ๊ณ์ด์ง๋ง, ์ปดํฌ๋ํธ ์ค์ฝํ๋ฅผ ๊ด๋ฆฌํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ์ ์ฌ์ ์ผ๋ก ์ฑ๋ฅ ํฅ์, prop drilling ๊ฐ์, ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ์ ์ด๋์ด๋ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์
์์ experimental_Scope๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ์ฌ์ ์ธ ๋จ์ ๊ณผ ๋ณต์ก์ฑ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
React๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ, experimental_Scope์ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์
๋๋ค. ์ปดํฌ๋ํธ ์ค์ฝํ ๊ด๋ฆฌ์ ์์น์ ์ดํดํ๊ณ experimental_Scope์ ๊ฐ์ ์คํ์ ๊ธฐ๋ฅ์ ํ์ํจ์ผ๋ก์จ, ์๋์ ์์ ๋๊ฐ๊ณ ๋ ํจ์จ์ ์ด๊ณ ๊ฒฌ๊ณ ํ React ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ต์ ์ ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ํด ํญ์ ๊ณต์ React ๋ฌธ์์ ์ปค๋ฎค๋ํฐ ์๋ฃ๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
์ถ๊ฐ ํ์ต ์๋ฃ
- React ๊ณต์ ๋ฌธ์: [์คํ์ ๊ธฐ๋ฅ์ ๋ํ React ๋ฌธ์ ๋งํฌ๊ฐ ์๋ ๊ฒฝ์ฐ]
- React ์ปค๋ฎค๋ํฐ ํฌ๋ผ: [React ์ปค๋ฎค๋ํฐ ํฌ๋ผ ๋งํฌ]
- ๊ด๋ จ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ฐ ๊ธฐ์ฌ: React ์ปดํฌ๋ํธ ์ค์ฝํ ๊ด๋ฆฌ ๋ฐ
experimental_Scope์ ๋ํ ๊ธฐ์ฌ๋ฅผ ์จ๋ผ์ธ์ผ๋ก ๊ฒ์ํด ๋ณด์ธ์.