React 프로젝트를 위한 boilerplate이다.
npx create-react-app my-app --template typescript
npm run start
function App() {
return (
JSX 부분
{JS 부분}
);
}
Welcome이라는 함수가 호출되면, h1 엘리먼트로 대치된다.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
🤔 return 내부(= JSX 내부)에서 중괄호(
{}
)는 자바스크립트 영역을 의미한다.
in Typescript
자료형이 스트링이 아닐 때는 {}
를 이용해서 객체를 넘긴다.
function Div(props:any) {
return (
<div>
div: {props.name1} <br />
{props.children}
</div>
);
}
function Span(props:any) {
return (
<span>
span: {props.name1} {props.name2}
</span>
);
}
function App() {
return (
<div className="App">
<Div name1="name1">
<Span name1="name1" name2="name2" />
</Div>
</div>
);
}
위에서는 임시로 자료형을 any
로 지정했지만, 다음처럼 정확하게 자료형을 지정할 수 있다.
이때, children
의 자료형은 ReactNode
이다.
import React, { ReactNode } from 'react';
function Div(props: { name1: string, children: ReactNode }) {
return (...);
}
function Span(props: { name1: string, name2: string }) {
return (...);
}
...
👉 실행 결과
<props.span1 />
와 {props.span1()}
는 같은 결과를 출력한다.
import './App.css';
// import Div from './Div';
// import Span from './Span';
const Div = (props: any) => {
return (
<div>
<props.span1 />
<br/>
{props.span1()}
<br />
{props.name1}
<br />
{props.span2()}
</div>
);
}
const Span = () => {
return (
<span>span rendered!</span>
);
}
function App() {
return (
<div className="App">
<Div name1="name1" span1={Span} span2={Span} />
</div>
);
}
export default App;