App.jsx 의 리턴에 있는 여는 태그와 닫는 태그의 사이에 있는 어떠한 값(Todo Mate)<header>Todo Mate</header>을 하위 컴포넌트 Header.jsx의 children인 props로 받는다.export default function Header({ children }) {
return <h1 className='title'>{children}</h1>;
}
// 이 부분을 props로 바꾸어서 console.log를 찍어보자!
export default function Header(props) {
console.log(props)
출력: {children: 'Todo Mate'}
// return <h1 className='title'>{children}</h1>;
}
children에 TodoMate가 할당이 된다. 그래서 Header({ children }) 적으면 props인 내부에 있는 children을 꺼내 쓸수 있다.
페이지를 보면 Todo Mate가 뜨는 방법!
<header>Todo Mate</header>헤더 안에 텍스트를 넣어서 홈페이지에 보여지는것이 아니라 하위 컴포넌트 Header에서 children을 받아서 출력되는것이다.
제목
<input
className='text-input'
type='text'
value={title}
name='title'
onChange={onChangeInput}>
</input>
const onChangeInput = (event) => {
if (event.target.name === "title") {
setTitle(event.target.value);
} else {
setBody(event.target.value);
}
};
input 태그에서 어떠한 값을 입력하면 그 값이 onChange에 의해서 event의 event.target.value에 들어가고 setTitle에 set(업데이트)된다.
<form onSubmit={onSubmit} className='addform_container'>
<div className='input_container'>
제목
<input className='text-input' type='text' value={title} name='title' onChange={onChangeInput}></input>
내용
<input className='text-input' type='text' value={body} name='body' onChange={onChangeInput}></input>
</div>
<button className='text-button' type='submit' onClick={onSubmit}>
추가하기
</button>
</form>
form태그 안에 버튼이 클릭이 되면 onSubmit이 호출 된다.

App에서 setTodos를 하위 컴포넌트로 props로서 내려주면 받은 하위 컴포넌트도 setTodos를 통해서 todos를 바꿔줄수 있다.
export default function App() {
const [todos, setTodos] = useState(initialTodos);
return (
<AddForm setTodos={setTodos} />
</div>
</div>
);
}
AddForm에 연결해줬다.setTodos를 가지고 있다.App.jsx의 useState를 변경할수 있는 역할을 가지게 된다.export default function AddForm({ setTodos }) {}
setTodo((prev) => [...prev, { id: uuid(), title, body, isDone: false }]);