출처: https://react.vlpt.us/using-typescript/02-ts-react-basic.html
CRA를 통해 컴포넌트 쉽게 만들어보기 $ npx create-react-app ts-react-tutorial --template typescript
src/Greeting.tsx
import React from 'react'
type GreetingProps = {
name: string;
mark: string;
optional?: string;
onClick: (name: string) => void
}
const Greeting = ({ name, mark, onClick }: GreetingProps) => {
const handleClick = () => onClick(name);
return (
<div>
<div>안녕 {name} {mark}</div>
<button onClick={handleClick}>Click</button>
</div>
)
}
Greeting.defaultProps = {
mark: '!'
}
export default Greeting
import React from 'react';
import Greeting from './Greeting';
function App() {
const onClick = (name: string) => {
console.log(name)
}
return (
<Greeting name='리액트' onClick={onClick} />
);
}
export default App;
React.FC
와 함수형 차이React.FC
사용시children
이 들어가있음children
이 들어가면 안되는 경우에 대한 처리 못함useState
: useState를 사용할 때는 제너릭을 사용하지 않아도 알아서 타입을 유추하기에 생략가능!null
일 수도 있고 아닐수도 있을때 Generics 를 활용하시면 좋음!type Information = { name: string; description: string };
const [info, setInformation] = useState<Information | null>(null);
onChange
에 마우스를 올리면 알 수 있다. const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
setForm({
...form,
[name]: value
});
};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
onSubmit(form);
setForm({
name: '',
description: ''
});
};
return (
<form onSubmit={handleSubmit}>
<input name="name" value={name} onChange={onChange} />
<input name="desc" value={desc} onChange={onChange} />
<button type="submit">등록</button>
</form>
)