export import를 통해 모듈로 사용<script> 태그에 type="module" 속성 추가<StrictMode>로 순수함수인지 확인<Fragment>...</Fragment> <>...</><>
<h1>제목</h1>
<p>내용 입력</p>
</>
<>
<input id="1" type="text" name="1"/>
<br/>
</>
class -> classNamefor -> htmlFor<>
<button onClick={ handleUp } className="upBtn">+</button>
</>
{} 안에는 변수값, 메서드 리턴값 등 값만 사용 가능{ {} } -> 자바스크립트 객체(JSON 형태) 사용function App(){
const list = [
{ _id: 1, title: 'React 공부', done: false},
{ _id: 2, title: 'Javascript 프로젝트', done: true},
{ _id: 3, title: 'Javascript 공부', done: true},
];
return (
<div id="app">
<div>
<Title />
<Title titleName="타이틀" />
<TodoList list={ list } />
</div>
</div>
);
}
// App()에서 title이 없을 경우 기본값으로 'Todo List' 매개변수 사용 - 기본값 매개변수
function Title({ titleName = 'Todo List' }){
return (
<div>
<h1>{ title }</h1>
<hr />
</div>
);
}
// 함수에 데이터 전달
function TodoList({ list }){
const itemList = list.map(item => {
return (
<li key={ item._id }>{ item.title } - { item.done ? '완료' : '진행중' }</li>
);
});
return (
<ul className="todolist">
{ itemList }
</ul>
)
}
<TodoList list={ list } />
function TodoList({ list }){
....
}
function Profile(props) {
return (
<div>
<Avatar { ...props } />
</div>
);
}
function Title({ titleName = 'Todo List' }){
....
}
functuin App() {
....
return (
<div id="counter">
<Button color="pink" onClick={handleDown}>-</Button>
<Button type="button" color="lightgray" onClick={(event) => handleReset(event)}>0</Button>
<Button type="button" color="skyblue" onClick={handleUp}>+</Button>
<span>{ count }</span>
</div>
)
}
// props 타입 지정
interface ButtonProps {
children: string;
type?: 'button'| 'reset' | 'submit';
color?: 'pink' | 'lightgray' | 'skyblue';
onClick: (event: React.MouseEvent) => void;
}
// children으로 <Button ...> </Button> 사이의 내용 사용
function Button ({children, type="button", color, onClick: handleClick}: ButtonProps){
return (
<button
type={ type }
onClick={ handleClick }
style={{ backgroundColor: color }}
className="rounded-button"
>{ children }</button>
)
}
function App() {
return (
<Title>Hello</Title>
)
}
function Title({ children }) {
return (
<p>{ children }</p>
)
}
매개변수
const [state, setState] = useState(initialState);
const handleChange = () => {
setState(state + 1);
}
객체를 불변성으로 만들어주는 라이브러리
설치
npm i immer
produce(원본 객체, 콜백 함수)draft: 복사한 새로운 객체, draft의 값을 수정한다const [ user, setUser ] = useState({
.... // 중첩 객체
});
function handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
// user를 복사한 새로운 객체를 만들어서 콜백함수의 인자로 전달
const newUser = produce(user, (draft)=>{
const address = draft.extra.addressBook.find(address => address.id === Number(event.target.id))
address!.value = event.target.value;
});
setUser(newUser);
}