React children with TypeScript
0. ๋น ๋ฅธ ์์ฝ
React.ReactNode
๋๋ React.PropsWithChildren<T>
๋ฅผ ์ฌ์ฉํ์.
๋๋
1. ๊ฐ์
React์ props์ค children
์ React์ ๊ฐ๋ ฅํ ํฉ์ฑ ๋ชจ๋ธ์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ์ฌ๊ธฐ์ ํฉ์ฑ์ด๋ผ๋ ๊ฒ์ ์ปดํฌ๋ํธ์์ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ ๋ด๋ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ฐ๋จํ ์์๋ง ๋ณด๊ณ ๋์ด๊ฐ๋ค.
Item
์ปดํฌ๋ํธ๋ Box
์ปดํฌ๋ํธ์ ๋ชจ์์ ๊ทธ๋๋ก ๋ด์ผ๋ฉด์ Item
์ปดํฌ๋ํธ๋ง์ JSX๋ฅผ ๋ฐํํ๊ณ ์๋ค. React children
์ ๋ํ ์ถ๊ฐ์ ์ธ ์์ธํ ์ค๋ช
์ React
ํ์ด์ง์์ ๋์ค์ ๋ค๋ฃจ๋๋ก ํ๊ณ ์ฌ๊ธฐ์๋ React children
์ ํ์
์ ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ๋ค.
chlidren
props์ ์๋์ ๊ฐ์ ๋ด์ฉ์ ๋ด์์ง์ ๋ฐ๋ผ ํ์
์ ๋ค๋ฅด๊ฒ ์ค์ ํด์ค์ผ ํ๋ค.
React Element
primitive(ex, ๋ฌธ์์ด)
๋ฐฐ์ด
2. JSX.Element
๊ฐ์ฅ ์ ํ์ ์ธ ์ ํ์ด๋ค. ๋จ์ผ Element
์ ๋ด์ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์๋์ ์์๋ฅผ ์ดํด๋ณด์.
App
์ปดํฌ๋ํธ๋ Box
์ปดํฌ๋ํธ์ ๊ฐ์ธ์ ธ ์๋ค. ์ฆ, App
์ปดํฌ๋ํธ๊ฐ Box
์ปดํฌ๋ํธ์ ๋ด์์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ด๊ธด App
์ปดํฌ๋ํธ์ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
์ด๋ ๊ฒ ๋จ์ผ Element
๋ฅผ children
์ผ๋ก ๋ด์ ๋ ์๋์ ๊ฐ์ด children
๋ฅผ JSX.Element
ํ์
์ผ๋ก ์ง์ ํ๋ค.
2-1. ์ค๋ฅ 1) ์ฌ๋ฌ ๊ฐ์ Element
์ค๋ฅ ์ฝ๋
ํ์ง๋ง ๋จ์ผ Element
๊ฐ ์๋๋ผ ์ฌ๋ฌ ๊ฐ์ Element
๊ฐ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๊ทธ๋ ๊ฒ ๋๋ฉด ์๋์ ์ฌ์ง๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ณผ ์ ์๋ค.
ํ๋์ ์์์ด ์๋ ์ฌ๋ฌ ๊ฐ์ ์์์ด children
์ผ๋ก ์ ๊ณต๋์๋ค๋ ๋ด์ฉ์ด๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ์ Element
๋ฅผ ํ๋์ ํ๊ทธ๋ก ๋ฌถ์ด์ฃผ๋ฉด ํด๊ฒฐ์ด ๊ฐ๋ฅํ๋ค.(์๋ ์ฝ๋ ์ฐธ๊ณ )
2-2. ์ค๋ฅ 2) string ํ์
์ Text
์ค๋ฅ ์ฝ๋
์ด๋ฒ์ Element
ํ์
์ children
์ด ์๋๋ผ string
ํ์
์ children
์ด๋ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น. ์๋์ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ณผ ์ ์๋ค.
3. React.ReactChild
React.ReactChild
ํ์
์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฌธ์์ด ๊ฐ์ primitive
๋ children
์ผ๋ก ํ์ฉ์ด๋๋ค.
3-1. ์ค๋ฅ 1) ์ฌ๋ฌ ๊ฐ์ Element
์ค๋ฅ ์ฝ๋
JSX.Element
ํ์
์ ์ฌ์ฉํ์ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๋ฌ๊ฐ์ Element
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
3-2. ์ค๋ฅ 2) Element์ Text ํจ๊ป ์ฌ์ฉ
์ค๋ฅ ์ฝ๋
React.ReactChild
์ ๋จ์ผ ์์๋ง ํ์ฉ์ ํ๋ค.
3-3. ์ค๋ฅ 3) ๋ฐฐ์ด ์ฌ์ฉ
์ค๋ฅ ์ฝ๋
children
๋ถ๋ถ์ ๋ฐฐ์ด์ ์ฌ์ฉ์ ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ด๊ฒ ๋ํ ๊ฐ๋ฅํ์ง ์๋ค.
React.ReactChild
ํ์
์ Element[]
์ ํํ์ ํ์
์ ํ์ฉํ์ง ์๋๋ค๋ ์ค๋ฅ๋ฅผ ๋ณผ ์ ์๋ค.
์ด๋ฐ ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ children
์ ํ์
์ React.ReactChild[]
๋ก ๋ฐ๊พธ์ด ์ฃผ๋ฉด ๋๋ค. ํด๋น ํ์
์ ์ฌ๋ฌ๊ฐ์ Element
๋ฅผ ํ์ฉํ๋ค. ๋จ Text
์ Element
๋ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
3-4. ReactChild ํ์
์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋๋ค.
children
๋ฅผ React.ReactChild
ํ์
์ผ๋ก ์ค์ ํ ๊ณณ์ ๋ณด๋ฉด ReactChild
์ ๊ฐ์ด๋ฐ์ ์ ์ด ๊ทธ์ด์ ธ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ํ์
์ด๋ผ๋ ๋ป์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฌ์ฉํ์ง ๋ง๊ณ ์ด๋ฌํ ํ์
์ด ์์๋ค๋ ๊ฒ๋ง ์๊ณ ๋์ด๊ฐ์.
4. React.ReactNode
React.ReactNode
๋ ๋ชจ๋ ๊ฒ์ ๋ด์ ์ ์๋ ์ต๊ฐ์ ํ์
์ด๋ค. ๋จ์ผ Element
, ๋ค์์ Element
, ๋ฐฐ์ด, ๋ฌธ์์ ๊ฐ์ ๊ฒ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๊ณ ์์ด์ ์ฌ์ฉ ๋ํ ๊ฐ๋ฅํ๋ค.
5. React.PropsWithChildren<T>
<T>
ํด๋น ํ์ ์ ์๋์ ๊ฐ์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
children
๋ฟ ์๋๋ผ ๋ค๋ฅธprops
๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ
children
๋ง ์กด์ฌํ ๊ฒฝ์ฐ
React.PropsWithChildren<T>
ํ์
๋ React.ReactNode
ํ์
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ ๊ฒ์ ๋ด์ ์ ์๋ค.
5. Conclusion
ํ์ ์คํฌ๋ฆฝํธ๋ก ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค ๋ณด๋ฉด ํญ์ ์ด๋ค ํ์ ์ ์ฌ์ฉํ ์ง ๊ตฌ๊ธ๋ก ๊ฒ์์ ํ๋ฉด์ ์ฐพ๋๋ค. ๋งค๋ฒ ๊ฐ์ ๋ด์ฉ์ด์ง๋ง ์์ง ์ต์ํ์ง ์์ ๊ณ์ ๊ฐ์ ๋ด์ฉ์ ์ฐพ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋๋ง์ ๊ณต๊ฐ์ ์ ๋ฆฌ๋ฅผ ํ๊ณ ๊ณ์ ์ฐธ๊ณ ํด์ ๋ณด๋ฉด ์ฐพ๊ธฐ๋ ํจ์ฌ ์ฝ๊ณ ์ ๋ฆฌ๊ณ ์ค์ค๋ก ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ ์ด ์ ๋ค์ด์จ๋ค. ๋ํ ํ์ํ ๋ด์ฉ์ ์ถ๊ฐ ์ญ์ ๋ ๊ฐ๋ฅํ๋ ์์ผ๋ก ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด์ ์์ฃผ ์ฌ์ฉ๋๊ณ ์ค์ํ ๋ด์ฉ์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค. ์ด๋ฒ ๊ณต๋ถ๋ฅผ ํตํด React Children์ ํ์ ์
React.ReactNode
๋๋React.PropsWithChildren<T>
๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๊ฒ ๋ค๋ ์๊ฐ์ ํ๊ฒ๋์๋ค.
์ฐธ๊ณ
React Children ๊ณผ ์นํด์ง๊ธฐ React children with typescript. ๋ฆฌ์กํธ children ์ปดํฌ๋ํธ ํ์ดํ ํ์ ์คํฌ๋ฆฝํธ : React.FC๋ ๊ทธ๋ง! children ํ์ดํ ์ฌ๋ฐ๋ฅด๊ฒ ํ๊ธฐ
๐ 2022-08-23
Last updated