React Twittler Intro ๊ณผ์ ๋ ํผ๋ฐ์ค์ ์์ฌ์ฝ๋๋ฅผ ์์ฑ
import React from "react";
import "./App.css";
import "./global-style.css";
import { dummyTweets } from "./static/dummyData";
// ! ์ ์ฝ๋๋ ์์ ํ์ง ์์ต๋๋ค.
console.log(dummyTweets); // ๊ฐ๋ฐ ๋จ๊ณ์์ ์ฌ์ฉํ๋ ๋๋ฏธ ๋ฐ์ดํฐ์
๋๋ค.
const Sidebar = () => {
return (
<section className="sidebar">
{/* ํด๋์ค ์ด๋ฆ์ ์ํ๋ ์์ด์ฝ์ ์ฃผ์๋ก ๋ฐ์จ๋ค. */}
<i className="far fa-comment-dots"></i>
</section>
);
};
// ์ค๋ ๋ด์ค๊ฐ ๋ช๊ฐ ๋์๋์ง ์๋ ค์ฃผ๋ counter ํจ์
const Counter = () => {
return (
<div className="tweetForm__input">
<div className="tweetForm__inputWrapper">
<div className="tweetForm__count" role="status">
<h1>์ค๋์ ๋ด์ค~</h1>
<br></br>
{/* dummyTweets ์ ๊ฐ์ ๋งํผ total์ ์ผ๋ง ์ ๋ด์ค๊ฐ ์ฌ๋ผ์๋์ง ์๋ ค์ฃผ๋ ์ฝ๋ */}
total : {dummyTweets.length}
</div>
</div>
</div>
);
};
// footer ์ฆ ํ๋จ์ ์๋ ํจ์๋ฅผ ์ ์ํ๋ ํจ์
const Footer = () => {
return (
<div>
<footer>
{/* footer ํ๊ทธ์์ ๋ก๊ณ ์ ์ฌ์ง ๋ฌด์จ๋ด์ฉ์ ์ฒจ๋ถํ ๊ฑด์ง ์๋ ค์ฃผ๋ ์ฝ๋. */}
<img id="logo" src={`${process.env.PUBLIC_URL}/codestates-logo.png`} />
Copyright @ 2022 Code States
</footer>
</div>
);
};
// TODO : Footer ํจ์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฉํฑ ์๋ฆฌ๋จผํธ footer๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
const Tweets = () => {
return (
<ul className="tweets">
{/* dummyTweets ์์ ์๋ ๋ฐ์ดํฐ๋ค์ map์ผ๋ก ์ํํ๋ฉด์ ๊ฐ๊ฐ ๋ฐ์ดํฐ๋ค์ tweet์ด๋ผ๊ณ ์ง์ */}
{dummyTweets.map((tweet) => {
// isParkHacker๋ฅผ tweet.username ์ด parkhacker๋ผ๊ณ ๋ช
์ํ๊ณ
// tweetUserNameClass ๋ฅผ ๋ฐํด์ปค ์ ๊ฐ๋ค๊ณ ์ ์ํด
// 3ํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๋ฐํด์ปค๊ฐ ๋ง์ผ๋ฉด username์ ๋ณด๋ผ์์ผ๋ก ๋ฐ๊พธ๊ณ ๊ทธ๊ฒ ์๋๋ฉด ํธ์์ด๋ฆ๋ง ์ถ๋ ฅํ๋ค.
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}></img>
</div>
<div className="tweet__content">
<div className="tweet__userInfo">
{/* TODO : ์ ์ ธ ์ด๋ฆ์ด ์์ด์ผ ํฉ๋๋ค. */}
{/* TODO : ์ด๋ฆ์ด "parkhacker"์ธ ๊ฒฝ์ฐ, ์ด๋ฆ ๋ฐฐ๊ฒฝ์์ rgb(235, 229, 249)์ผ๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค. */}
{/* TODO : ํธ์ ์์ฑ ์ผ์๊ฐ ์์ด์ผ ํฉ๋๋ค. */}
<span className={tweetUserNameClass}>{tweet.username}</span>
<span className="tweet__createdAt">{tweet.createdAt}</span>
</div>
{/* TODO : ํธ์ ๋ฉ์ธ์ง๊ฐ ์์ด์ผ ํฉ๋๋ค. */}
<span className={"tweet__message"}>{tweet.content}</span>
</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 />
{/* TODO : Footer ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค. */}
<Footer />
</section>
);
};
const App = () => {
return (
<div className="App">
<main>
{/* TODO : Sidebar ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค. */}
<Sidebar />
<Features />
</main>
</div>
);
};
// ! ์๋ ์ฝ๋๋ ์์ ํ์ง ์์ต๋๋ค.
export { App, Sidebar, Counter, Tweets, Features, Footer };