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 }]);