[React with TypeScript] 타입스크립트를 적용한 리액트 프로젝트 생성하기
📄 타입스크립트를 적용한 리액트 프로젝트 생성하기
리액트에 타입스크립트를 적용한 프로젝트를 생성할 때는 다음과 같은 명령어를 사용합니다.
$ npx create-react-app ts-react-tutorial --template typescript
이렇게 프로젝트를 생성하면 src
폴더 안에 App.tsx
파일이 생성됩니다.
컴포넌트 App
의 타입이 React.FC
로 지정되어 있는것을 확인할 수 있습니다.
// App.tsx
import React from "react";
import logo from "./logo.svg";
import "./App.css";
const App: React.FC = () => {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.tsx</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
};
export default App;
▪ React.FC
React.FC
를 사용할 때는 props
의 타입을 Generics로 넣어서 사용합니다.
// Greetings.tsx
import React from "react";
type GreetingsProps = {
name: string;
};
const Greetings: React.FC<GreetingsProps> = ({ name }) => (
<div>Hello, {name}</div>
);
export default Greetings;
✔ React.FC의 장점
props
에 기본적으로children
이 들어있다.defaultProps
,propTypes
,contextTypes
를 설정할 때 자동완성이 된다.
✔ React.FC의 단점
children
이 옵셔널 형태로 들어가 있어 컴포넌트의props
타입이 명백하지 않다.
// src/Greetings.tsx
import React from "react";
type GreetingsProps = {
name: string;
mark: string;
};
const Greetings: React.FC<GreetingsProps> = ({ name, mark }) => (
<div>
Hello, {name} {mark}
</div>
);
Greetings.defaultProps = {
mark: "!",
};
export default Greetings;
// src/App.tsx
import React from "react";
import Greetings from "./Greetings";
const App: React.FC = () => {
return <Greetings name="Hello" />;
};
export default App;
mark
를 defaultProps
에 넣었습니다.
하지만 App
에서 해당 컴포넌트를 렌더링했을때 mark
의 값이 없다고 알려주며 렌더링되지 않는 현상이 발생합니다.
이때 React.FC
를 생략하면 정상적으로 렌더링되기 때문에 React.FC
의 사용을 권장하지 않는 것을 권장하기도 합니다.
// React.FC를 사용하지 않은 Greetings.tsx
import React from "react";
type GreetingsProps = {
name: string;
mark: string;
};
const Greetings = ({ name, mark }: GreetingsProps) => (
<div>
Hello, {name} {mark}
</div>
);
Greetings.defaultProps = {
mark: "!",
};
export default Greetings;
출처
- 패스트캠퍼스 for velopert
Leave a comment