React ๊ธฐ์ดˆ (2) ๐Ÿฆ

forhreverยท2023๋…„ 3์›” 28์ผ
0

import ~ from ~

  • importย ํ‚ค์›Œ๋“œ ๋‹ค์Œ์— ์‹๋ณ„์ž(์‚ฌ์šฉํ•  ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค)๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • fromย ํ‚ค์›Œ๋“œ ๋‹ค์Œ์— ๋ถˆ๋Ÿฌ์˜ฌ ๋ชจ๋“ˆ์˜ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
import Page from './Page'; 

Routes, Route

๊ฒฝ๋กœ๋ฅผ ๋งค์นญํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

  • <Routes>์ปดํฌ๋„ŒํŠธ๋Š” ์—ฌ๋Ÿฌ <Route>์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ์‹ธ์„œ ๊ทธ์ค‘ ๊ฒฝ๋กœ๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ๋ผ์šฐํ„ฐ๋งŒ ๋ Œ๋”๋ง์„ ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • <Route>์ปดํฌ๋„ŒํŠธ๋Š” path์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ ํ•ด๋‹น path ์—์„œ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ค„์ง€ ์ •ํ•ฉ๋‹ˆ๋‹ค.
<Routes>
  {/* ๊ฒฝ๋กœ๋Š” path๋กœ ์ปดํฌ๋„ŒํŠธ๋Š” element๋กœ ์—ฐ๊ฒฐํ•ด ์ค๋‹ˆ๋‹ค. */}
     <Route path="/" element={<Home />} /> 
     <Route path="/mypage" element={<MyPage />} /> 
     <Route path="/dashboard" element={<Dashboard />} />
</Routes>

๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค.

  • <Link> ์˜ to ์†์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ <Route> ์ปดํฌ๋„ŒํŠธ์— ์„ค์ •ํ•ด ์ค€ path ์ฃผ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•ด ์ค๋‹ˆ๋‹ค.
<li>
     <Link to="/">Home</Link>{/* Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค */}
</li>
<li>
      <Link to="/mypage">MyPage</Link>
</li>
<li>
      <Link to="/dashboard">Dashboard</Link>
</li>

React Twittler SPA ๊ณผ์ œ

https://github.com/forhrever/fe-sprint-react-twittler-spa.git

  • react-router-dom ์„ npm์œผ๋กœ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
npm install react-router-dom@^6.3.0  // ํ„ฐ๋ฏธ๋„์— ์ž‘์„ฑ
  • App ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ(App.js)
    • import ๋ฅผ ์ด์šฉํ•˜์—ฌ Tweets, MyPage, About ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
// TODO - import๋ฌธ์„ ์ด์šฉํ•˜์—ฌ MyPage, About ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์„ธ์š”.
import Tweets from './Pages/Tweets';
import MyPage from './Pages/MyPage';
import About from './Pages/About';
  • Sidebar ๋ฉ”๋‰ด ์ปดํฌ๋„ŒํŠธ(Sidebar.js)
    • Font Awesome์„ ํ™œ์šฉํ•˜์—ฌ About ์•„์ด์ฝ˜ <i className="far fa-question-circle"></i>์„ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • Font Awesome์„ ํ™œ์šฉํ•˜์—ฌ MyPage ์•„์ด์ฝ˜ <i className="far fa-user"></i>์„ ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
{/* TODO : About ๋ฉ”๋‰ด ์•„์ด์ฝ˜๊ณผ Mypage ๋ฉ”๋‰ด ์•„์ด์ฝ˜์„ ์ž‘์„ฑํ•˜๊ณ  Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฝ๋กœ(path)๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. */}
      <Link to = "/">
        <i className="far fa-comment-dots"></i>
      </Link>

      <Link to = "/about">
        <i className="far fa-question-circle"></i>
      </Link>

      <Link to = "/mypage">
        <i className="far fa-user"></i>
      </Link>
  • Tweets ์ปดํฌ๋„ŒํŠธ(Tweets.js)
    • import ๋ฅผ ์ด์šฉํ•˜์—ฌ Footer ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    • dummyTweets์˜ ๊ธธ์ด๋งŒํผ ํŠธ์œ—์ด ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค
// TODO - import๋ฌธ์„ ์ด์šฉํ•˜์—ฌ Footer ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์„ธ์š”.
import Footer from '../Footer';
<span className="tweetForm__count__text">
           {/* dummyTweets์˜ ๊ธธ์ด๋งŒํผ ํŠธ์œ—์ด ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค */}
           {'total: ' + dummyTweets.length} 
</span>
  • MyPage ์ปดํฌ๋„ŒํŠธ(MyPage.js)
    • import ๋ฅผ ์ด์šฉํ•˜์—ฌ Footer ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
    • kimcoding์ด ์ž‘์„ฑํ•œ ํŠธ์œ—๋งŒ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
// TODO - import๋ฌธ์„ ์ด์šฉํ•˜์—ฌ Footer ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
import Footer from "../Footer";
{/* TODO : dummyTweets์ค‘ kimcoding ์ด ์ž‘์„ฑํ•œ ํŠธ์œ— ๋ฉ”์„ธ์ง€๋งŒ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. */}
        <li className="tweet" id ={"1"}>
          <div className="tweet__profile">
            <img src={filteredTweets[0].picture} />
          </div>
          <div className="tweet__content">
            <div className="tweet__userInfo">
              <span className="tweet__username">{filteredTweets[0].username}</span>
              <span className="tweet__createdAt">{filteredTweets[0].createdAt}</span>
            </div>
            <div className="tweet__message">{filteredTweets[0].content}</div>
          </div>
        </li>
  • App ๋ฃจํŠธ ์ปดํฌ๋„ŒํŠธ(App.js)
    • <BrowserRouter>, <Routes>, <Route> ๋กœ React Router ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ฃผ์†Œ์— ๋”ฐ๋ฅธ ํŽ˜์ด์ง€๋ฅผ <Route> ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ๋ถ„ ์ง€์–ด ์ค๋‹ˆ๋‹ค.
      • Tweets์ปดํฌ๋„ŒํŠธ์˜ Route path๋Š” "/"์ž…๋‹ˆ๋‹ค.
      • About ์ปดํฌ๋„ŒํŠธ์˜ Route path๋Š” "/about"์ž…๋‹ˆ๋‹ค.
      • MyPage ์ปดํฌ๋„ŒํŠธ์˜ Route path๋Š” "/mypage"์ž…๋‹ˆ๋‹ค.
// TODO - react-router-dom์„ ์„ค์น˜ ํ›„, import ๊ตฌ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ BrowserRouter, Routes, Route ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์„ธ์š”.
import { BrowserRouter, Routes, Route } from "react-router-dom";
{/* TODO - Routes์™€ Route ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฝ๋กœ(path)๋ฅผ ์„ค์ •ํ•˜๊ณ  Tweets, Mypage, About ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. */}
            <Routes>
              <Route path="/" element={ <Tweets />} /> 
              <Route path="/mypage" element={<MyPage />} /> 
              <Route path="/about" element={<About />} />
            </Routes>
  • Sidebar ๋ฉ”๋‰ด ์ปดํฌ๋„ŒํŠธ(Sidebar.js)
    • <Link> ์ปดํฌ๋„ŒํŠธ์˜ to ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ SPA ๋‚ด์—์„œ ํŽ˜์ด์ง€ ์ „ํ™˜์— ๋”ฐ๋ฅธ URL ์—…๋ฐ์ดํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      • Tweets ์ปดํฌ๋„ŒํŠธ์˜ Route path๋Š” "/"์ž…๋‹ˆ๋‹ค.
      • About ์ปดํฌ๋„ŒํŠธ์˜ Route path๋Š” "/about"์ž…๋‹ˆ๋‹ค.
      • MyPage ์ปดํฌ๋„ŒํŠธ์˜ Route path๋Š” "/mypage"์ž…๋‹ˆ๋‹ค.
import { Link } from 'react-router-dom';
// TODO - import๋ฌธ์„ ์ด์šฉํ•˜์—ฌ react-router-dom ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
{/* TODO : About ๋ฉ”๋‰ด ์•„์ด์ฝ˜๊ณผ Mypage ๋ฉ”๋‰ด ์•„์ด์ฝ˜์„ ์ž‘์„ฑํ•˜๊ณ  Link ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฒฝ๋กœ(path)๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. */}
      <Link to = "/">
        <i className="far fa-comment-dots"></i>
      </Link>

      <Link to = "/about">
        <i className="far fa-question-circle"></i>
      </Link>

      <Link to = "/mypage">
        <i className="far fa-user"></i>
      </Link>


profile
๊ฐœ๋ฐœ์ž ์„ฑ์žฅ ๊ณ„๋‹จ ์˜ฌ๋ผ๊ฐ€๊ธฐ

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