본문 바로가기

Front End/React

[React Exam 33] map()을 이용한 3.1 혁명 민족 대표 보기

데이터는 아래의 주소에서 구했으며 클릭시 원본 기사로 넘어갑니다.

https://www.ohmynews.com/NWS_Web/Series/series_premium_list.aspx?SRS_CD=0000011986

 

민족대표 33인 열전

"기미년 3월 1일 정오..." 한국 사람이라면 귀에 익은 가사지만 이 노래 이상으로 3.1혁명에 대해 아는 이는 그리 많지 않다. 3.1혁명은 윌슨의 민족자결주의 등 전 세계적인 흐름에 힘입기도 했지

www.ohmynews.com

 

NationalRepresentative.json
0.02MB

 

 

NationalRepresentative.css 파일을 만듭니다.

.main-title {
    width: 880px;
    margin: auto;
    padding : 5px;
    margin-bottom: 10px;
    font-size: 2.5rem;
    text-align: center;
}
.item {
    width: 880px;
    margin: auto;
    cursor : pointer;
    padding : 10px;
    border: 0px solid gray;
    border-bottom: 2px solid gray;
    border-right: 2px solid gray;
    margin-bottom: 10px;
    border-radius: 10px;
    background-color: #EEEEEE;
}
img {
    width: 160px;
    height: 130px;
    padding: 2px;
    border: 1px solid gray;
    border-radius: 20px;
    margin: 5px;
    float: left;
    margin-right: 15px;
    background-color: gold;
}
.title {
    font-size: 1.5rem;
    font-weight: bold;
    margin-bottom: 8px;
}
.subtitle {
    font-size: 1.1rem;
    font-weight: bold;
    margin-bottom: 8px;
}
.description{
    font-size: 0.9rem;
}

 

NationalRepresentative.js 파일을 만듭니다.

import './NationalRepresentative.css'

const NationalRepresentative = ({item})=>{
    const {index, title, subtitle, description, imageUrl, linkAddress} = item;
    const clickHandler = () => {
        window.location.href = linkAddress;
    }
    const no=`${index}`.padStart(2,'0');
    return (
        <div className="item" onClick={clickHandler}>
            <img className="item-image" src={imageUrl} alt={title}/>
            <div className="title">{no}. {title}</div>
            <div className="subtitle">{subtitle}</div>
            <div className="description">{description}</div>
            <br style={{clear:"both"}}/>
            <div style={{fontSize:"0.8rem", textAlign:"right"}}><b>3.1 혁명을 이끈 민족대표 33인</b>  정운현지음, 역사인(2019) </div>
        </div>

    );
}
export default NationalRepresentative;

 

App.js  파일을 만듭니다.

import NationalRepresentative from "./NationalRepresentative";
import ns from './Data/NationalRepresentative'
import './NationalRepresentative.css'
const App = ()=>{
    return (
        <>
        <div className="main-title" style={{fontSize:"1.2rem"}}>오마이뉴스 창간 19주년, 3.1혁명 100년 특별기획</div>
        <div className="main-title">3.1 혁명을 이끈 민족대표 33인</div>

        {
            ns.map((data, index)=> <NationalRepresentative item={data} key={index}/>)
        }
        </>
    );
}
export default App;

 

index.js  파일을 만듭니다.

import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
 
const root = ReactDOM.createRoot(document.querySelector("#app"));
root.render(
    <React.StrictMode>
        <App/>
    </React.StrictMode>
);    

 

 

결과 화면 입니다.