๐ Component์ Type ์ง์
TS๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฒ๋ผ Modal์ component๋ก์ ์ฌ์ฉํ ๋ , Modal์ ํ์ ์ ์ง์ ํด์ค์ผํ๋ค.
์ด๋ป๊ฒ Type์ ์ค์ ํด์ผํ ๊น?
const Modal: ํ์
๋ญ์ฐ์ง? = ({ prop1, prop2, children }) => {
return (
<div>
<h1>{prop1}</h1>
<p>{prop2}</p>
{children}
</div>
);
};
export default Modal;
โ๏ธ React 18๋ฒ์ ์ด์
react 18๋ฒ์ ์ด์ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ๋ ์๋์ ๊ฐ์ ํ์ ์ผ๋ก ์ ์ํด์ ์ฌ์ฉํ๋ค.
React.FC: React.FunctionComponent => component์ children ์ ํฌํจ
React.VFC: React.VoidFunctionComponent => component์ children ์ ๋ฏธํฌํจ
React.SFC: React.StatelessFunctionComponent(react.FC์ ๊ตฌ๋ฒ์ )
18๋ฒ์ ์ด์ children ์ ํฌํจํ ์ปดํฌ๋ํธ ํ์ ์ง์ โผ
MyCompontentProps์ children ์ ํ์ ์ ์ง์ ํด์ฃผ์ง ์์๋ ์๋์ผ๋ก FC์ children ํ์ ์ด ๋ค์ด์์.
import React from 'react';
interface MyComponentProps {
prop1: string;
prop2: number;
// ์ฌ๊ธฐ์ ์ถ๊ฐ props ์ ์ ๊ฐ๋ฅ
}
const MyComponent: React.FC<MyComponentProps> = ({ prop1, prop2, children }) => {
return (
<div>
<h1>{prop1}</h1>
<p>{prop2}</p>
{children}
</div>
);
};
export default MyComponent;
but! Children ์ด ํญ์ ํ์ํ๊ฑด ์๋๊ณ ํผ๋์ ์ผ์ผํฌ ์ ์์ด์ 18๋ฒ์ ์ดํ์๋ ์ฌ์ฉ๋ฐฉ๋ฒ์ด ๋ฐ๊ผ๋ค.
โญ๏ธ React 18๋ฒ์ ์ดํ
React.SFC ์ React.VFC๋ ์ฌ๋ผ์ก๋ค. ์ด์ ๋ชป ์ด๋ค.
React.FC ๋ง ๋จ์๋๋ฐ ์ด๋ป๊ฒ ์ฌ์ฉํ๋๋ฉด
์ปดํฌ๋ํธ์ ํ์ ์ง์ ์ ํด์ค ๋
children : React.ReactNode
์ด๊ฒ ์ถ๊ฐ๋์ผํ๋ค.(react์์ ์ ํด๋์ children ํ์ ์)
import React from 'react';
interface MyComponentProps {
prop1: string;
prop2: number;
children?: React.ReactNode; // children ์์ฑ์ ์ ํ์ ์ผ๋ก ์ถ๊ฐ
// ์ฌ๊ธฐ์ ์ถ๊ฐ props ์ ์ ๊ฐ๋ฅ
}
const MyComponent: React.FC<MyComponentProps> = ({ prop1, prop2, children }) => {
return (
<div>
<h1>{prop1}</h1>
<p>{prop2}</p>
{children}
</div>
);
};
export default MyComponent;
๐ผ ์ฐธ๊ณ
https://react-typescript-cheatsheet.netlify.app/docs/basic/getting-started/function_components
Function Components | React TypeScript Cheatsheets
These can be written as normal functions that take a props argument and return a JSX element.
react-typescript-cheatsheet.netlify.app
'frontEnd > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
TypeScript ํ๋ก์ ํธ ์ด๊ธฐ ์ ํ : tsconfig (0) | 2023.12.28 |
---|