React-Tweetler 스프린트 의사코드

2023. 1. 20. 23:51카테고리 없음

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>
      <i class="fa-sharp fa-solid fa-video"></i>
      <i class="fa-sharp fa-solid fa-arrow-up-from-bracket"></i>
      <i class="fa-sharp fa-solid fa-envelope"></i>
      <i class="fa-sharp fa-solid fa-gear"></i>
      
    </section>
  );
};

const Counter = () => { //카운터 컴포넌트
  return (
    <div className="tweetForm__input">
      <div className="tweetForm__inputWrapper">
        <div className="tweetForm__count" role="status">
          <span className="tweetForm__count__text">총 트윗 횟수:{dummyTweets.length}</span>
        </div>
        <img id= "titlelogo" src="https://www.codestates.com/assets/common/logo/codestates-ci.png"></img>
      </div>
    </div>
  );
};

const Footer = () => { //푸터 컴포넌트
  return (
    <div>
      <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) => {
        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">
              <img src = {tweet.picture}></img>
            </div>
            <div className="tweet__content">
              <div className="tweet__userInfo">
              
                <span className={tweetUserNameClass}>{tweet.username}</span>
                {/* TODO : 이름이 "parkhacker"인 경우, 이름 배경색을 rgb(235, 229, 249)으로 바꿔야 합니다. */}
                <span className='tweet__createdAt'>{tweet.createdAt}</span>
              </div>
              <div className='tweet__message'>{tweet.content}</div>
            </div>
          </li>
        );
      })}
    </ul>
  );
};

const Features = () => { // 피쳐 컴포넌트 // feature클래스 안에 Counter,Tweets,Footer 가 후손태그로 들어가있다.
  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 = () => { // 앱 컴포넌트 // APP클래스 자식태그인 main, 후손태그인 Sidebar,Feature 가 있다.
  return ( // 크게보면 feature 와 app이 큰덩어리 컴포넌트고 각각에 자손으로 여러 컴포넌트들이 들어가있다. 이렇게 합쳐진 app컴포넌트는 html root아이디 태그로 들어가 화면에 출력된다.
    <div className="App">
      <main>
       <Sidebar />
        <Features />
      </main>
    </div>
  );
};

// ! 아래 코드는 수정하지 않습니다.
export { App, Sidebar, Counter, Tweets, Features, Footer };