단방향으로 흐르는 React 데이터 흐름에 대해 학습합니다.
상태를 변경하는 함수
를 하위 컴포넌트로 전달하고 하위 컴포넌트가 해당 함수를 실행
한다.import React, { useState } from "react";
...(생략)
function Twittler() {
...(생략)
const addNewTweet = (newTweet) => {
setTweets([...tweets, newTweet]);
}; // 이 상태 변경 함수가 NewTweetForm에 의해 실행되어야 합니다.
return (
<div>
<div>작성자: {currentUser}</div>
<NewTweetForm onButtonClick={addNewTweet} />
<ul id="tweets">
{tweets.map((t) => (
<SingleTweet key={t.uuid} writer={t.writer} date={t.date}>
{t.content}
</SingleTweet>
))}
</ul>
</div>
);
}
function NewTweetForm({ onButtonClick }) {
const [newTweetContent, setNewTweetContent] = useState("");
const onTextChange = (e) => {
setNewTweetContent(e.target.value);
};
const onClickSubmit = () => {
let newTweet = {
uuid: Math.floor(Math.random() * 10000),
writer: currentUser,
date: new Date().toISOString().substring(0, 10),
content: newTweetContent
};
// TDOO: 여기서 newTweet이 addNewTweet에 전달되어야 합니다.
onButtonClick(newTweet);
setNewTweetContent("");
};
return (
<div id="writing-area">
<textarea
id="new-tweet-content"
value={newTweetContent}
onChange={onTextChange}
></textarea>
<button id="submit-new-tweet" onClick={onClickSubmit}>
...(생략)
코드스테이츠 프론트엔드 부트캠프
리액트 공식문서