Unit9 - [React] State 끌어올리기
2023. 2. 3. 09:48ㆍ코드스테이츠/코드스테이츠S2: Chapter & Unit
State 끌어올리기 실습
import React, { useState } from "react";
import "./styles.css";
const currentUser = "김코딩";
function Twittler() {
const [tweets, setTweets] = useState([
{
uuid: 1,
writer: "김코딩",
date: "2020-10-10",
content: "안녕 리액트"
},
{
uuid: 2,
writer: "박해커",
date: "2020-10-12",
content: "좋아 코드스테이츠!"
}
]);
//**새로운 작성된 트윗인 newtweet을 받아와서 트윗리스트에 넣어준다. */
const addNewTweet = (newTweet) => {
setTweets([...tweets, newTweet]);
}; // 이 상태 변경 함수가 NewTweetForm에 의해 실행되어야 합니다.
return (
<div>
<div>작성자: {currentUser}</div>
//상태변경함수를 하위컴포넌트에 props로 넘겨준다.
<NewTweetForm onButtonClick={addNewTweet} />
<ul id="tweets">
{tweets.map((t) => (
<SingleTweet key={t.uuid} writer={t.writer} date={t.date}>
{t.content}
</SingleTweet>
))}
</ul>
</div>
);
}
//상위컴포넌트에서 받은 addNewTweet이 담겨있는 onbuttonClick을 props로 받는다.
function NewTweetForm({ onButtonClick }) {
const [newTweetContent, setNewTweetContent] = useState("");
const onTextChange = (e) => {
setNewTweetContent(e.target.value);
};
const onClickSubmit = () => {
//submit버튼을 누르면 텍스트박스에 입력한 내용이 담긴 newtweet을 props로 받은 상태변경함수에 넣어준다.
let newTweet = {
uuid: Math.floor(Math.random() * 10000),
writer: currentUser,
date: new Date().toISOString().substring(0, 10),
content: newTweetContent
};
// TDOO: 여기서 newTweet이 addNewTweet에 전달되어야 합니다.
//newTweet 의 내용이 상위컴포넌트의 'addNewTweet' 상태변경함수에 전달된다.
onButtonClick(newTweet);
};
return (
<div id="writing-area">
<textarea id="new-tweet-content" onChange={onTextChange}></textarea>
<button id="submit-new-tweet" onClick={onClickSubmit}>
새 글 쓰기
</button>
</div>
);
}
function SingleTweet({ writer, date, children }) {
return (
<li className="tweet">
<div className="writer">{writer}</div>
<div className="date">{date}</div>
<div>{children}</div>
</li>
);
}
export default Twittler;
'코드스테이츠 > 코드스테이츠S2: Chapter & Unit' 카테고리의 다른 글
Unit.10 [Web Server] 기초 (0) | 2023.02.06 |
---|---|
Unit.8 HTTP/네트워크 실습 (0) | 2023.01.31 |
Unit.7 [HTTP/네트워크] 기초 (0) | 2023.01.30 |
Unit.6 [React]이벤트 처리 (0) | 2023.01.26 |
Unit.6 [React]React State & Props (0) | 2023.01.25 |