๋ฐ˜๋”ง๐Ÿ”ฅ๋ฐ˜

์ „์˜ˆํ›ˆยท2023๋…„ 3์›” 27์ผ
0

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 };
profile
๋”์šฑ๋” QA์Šค๋Ÿฝ๊ฒŒ!

0๊ฐœ์˜ ๋Œ“๊ธ€