모각코+/React
[모각코+] 웹 리액트(React) 1월달과정 9일차
Jshrewd
2022. 1. 21. 18:05
728x90
✅ 오늘의 문제 : 새로운 페이지 생성 by Qcell | 코드메이트
이번 시간에서는 리액트의 특성 중 하나인 SPA(Single Page Application)을 학습했습니다. 말 그대로 리액트는 페이지가 하나인 어플리케이션이라는 뜻으로, HTML의 a로 링크를 만드는 것과는 확연히 다
codemate.kr
✅ 오늘의 문제 : 새로운 페이지 생성
이번 시간에서는 리액트의 특성 중 하나인 SPA(Single Page Application)을 학습했습니다.
말 그대로 리액트는 페이지가 하나인 어플리케이션이라는 뜻으로, HTML의 a로 링크를 만드는 것과는 확연히 다른 구조였습니다. react-router-dom 라이브러리를 설치한 뒤에 사용했습니다.
✔ index.js
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root'),
);

페이지 폴더를 따로 만들어서 컴포넌트를 분리한 뒤에, Layout으로 모두 감싸주었습니다.
App.js
import youtubeData from './data/youtubeData.json';
import { Route, Routes } from 'react-router-dom';
import Home from './pages/Home';
import Explore from './pages/Explore';
import Subscription from './pages/Subscription';
import Assignment from './pages/Assignment';
function App() {
return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/explore" element={<Explore />} />
<Route path="/subscription" element={<Subscription />} />
<Route path="/assignment" element={<Assignment />} />
</Routes>
);
}
export default App;
Menu.js
import { Link } from 'react-router-dom';
import styles from './Menu.module.css';
function Menu() {
return (
<div>
<div>
<Link to="/">홈</Link>
</div>
<div>
<Link to="/explore">탐색</Link>
</div>
<div>
<Link to="/subscription">구독</Link>
</div>
<div>
<Link to="/assignment">과제</Link>
</div>
</div>
);
}
export default Menu;
그리고 오늘의 과제는 8일차의 삼항연산자 과제를 출력 할 Assignment 페이지를 생성하고, 메뉴에 링크를 추가하여 링크를 클릭하였을 때 8일차의 삼항 연산자 예제가 출력되어야 하는 문제였습니다.
이를 학습함으로써, 구독 링크를 클릭하였을 때 구독 아이콘이 변화하는 기능을 구현할 수 있을 것 같습니다.
Assignment.js
import Layout from '../components/shared/Layout';
import { useState } from 'react';
import styles from '../App.module.css';
function Assignment() {
const [check,setSub]=useState(false);
function subScribe(){
setSub(check=>!check);
}
return (
<Layout>
{check?
<button className={styles.sub2} onClick={subScribe}>구독중</button>:<button className={styles.sub1} onClick={subScribe}>Subscribe</button>}
</Layout>
);
}
export default Assignment;

728x90