학습 목표
- 리액트, JSX 기본 문법을 익힌다.
- 리액트, JSX로 트위틀러를 하드 코딩할 수 있다.
- 컴포넌트를 먼저 개발하는 Bottom-up 개발 방식에 익숙해진다.
- npm script로 리액트 개발에 필요한 기본적인 툴을 사용할 수 있다.
const Sidebar = () => {
return (
<section className="sidebar">
{/* TODO : 메세지 아이콘을 작성합니다. */}
<i className="far fa-comment-dots"></i>
</section>
);
};
const Counter = () => {
return (
<div className="tweetForm__input">
<div className="tweetForm__inputWrapper">
<div className="tweetForm__count" role="status">
total: {dummyTweets.length}
</div>
</div>
</div>
);
};
<footer>
가 포함되어야 합니다.const Footer = () => {
return (
<footer>
<div>
<img id="logo" src={`${process.env.PUBLIC_URL}/codestates-logo.png`} />
Copyright @ 2022 Code States
</div>
</footer>
);
};
<img>
엘리먼트를 생성하고 dummyTweets의 이미지 주소 정보를 찾아서 <src>
속성을 지정합니다. <span>
엘리먼트를 생성하고 dummyTweets의 유저 이름을 <span>
의 텍스트 콘텐츠로 넣습니다. <span>
엘리먼트를 생성하고 dummyTweets의 트윗 생성 일자를 <span>
의 텍스트 콘텐츠로 넣습니다.<div>
엘리먼트를 생성하고 dummyTweets의 트윗 내용을 <div>
의 텍스트 콘텐츠로 넣습니다.(tweet__username--purple)
를 지정해야 합니다. (tweet__username tweet__username--purple)
const Tweets = () => {
return (
<ul className="tweets">
{dummyTweets.map((tweet) => {
const isParkHacker = tweet.username === "parkhacker";
const tweetUserNameClass = isParkHacker
? "tweet__username tweet__username--purple"
: "tweet__username";
return (
<li className="tweet" key={tweet.id}>
<div className="tweet__profile">
{/* TODO: 트윗 저자의 프로필 사진이 있어야 합니다. */}
<img src={tweet.picture} />
</div>
<div className="tweet__content">
<div className="tweet__userInfo">
{/* TODO : 유져 이름이 있어야 합니다. */}
<span className={tweetUserNameClass}>{tweet.username}</span>
{/* TODO : 이름이 "parkhacker"인 경우, 이름 배경색을 rgb(235, 229, 249)으로 바꿔야 합니다. */}
{/* TODO : 트윗 생성 일자가 있어야 합니다. */}
<span className="tweet__createdAt">{tweet.createdAt}</span>
</div>
<div className="tweet__message">{tweet.content}</div>
</div>
</li>
);
})}
</ul>
);
};
const Features = () => {
return (
<section className="features">
<div className="tweetForm__container">
<div className="tweetForm__wrapper">
<div className="tweetForm__profile"></div>
<Counter />
</div>
</div>
<Tweets />
<Footer />
</section>
);
};
const App = () => {
return (
<div className="App">
<main>
<Sidebar />
<Features />
</main>
</div>
);
};
// ! 아래 코드는 수정하지 않습니다.
export { App, Sidebar, Counter, Tweets, Features, Footer };
과제가 끝나고 느낌점...