일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 일
- 광명파티룸
- 스컬킹점수계산
- 웹개발
- 서울파티룸
- 스컬킹
- 보드게임점수
- 파티룸
- 개발자
- 그릭요거트
- 존경하는위인
- 옥길동요거트
- 스페이스우일
- 옥길그릭요거트
- 옥길동파티룸
- 옥길요거트
- 휴식
- 해외여행
- 착한코딩
- 옥길파티룸
- 구로파티룸
- mysql
- 부천공간대여
- 보드게임점수계산
- 스컬킹점수
- 코딩
- 가장존경하는인물
- 취미
- 부천파티룸
- MBTI
- Today
- Total
SIMPLE & UNIQUE
1-3강 : html, css, img파일 세팅, 공공데이터 API 호출 본문
1_3 목표 : 공통영역(header, footer)을 별도로 구현하고, header와 footer 사이에 라우팅된 페이지를 노출시킨다. SK telecom Big Data Hub가입해서 API KEY를 발급 받는다. 발급 받은 KEY를 사용해 사이트에서 API를 호출한다.
1. css, img 폴더를 세팅한다.
react 경로 C:\react200\client\src에
제공받은 폴더 경로 \index에 위치한 css, img 폴더를 복사+붙여넣는다.
2. App.js 파일에 css와 header, footer 파일을 import한다.
App.js 파일을 아래와 같이 수정한다.
import React, { Component } from 'react';
import { Route, Switch } from "react-router";
import Api_test from './Api_test'
// css
import '../css/new.css';
// header
import HeaderAdmin from './Header/Header admin';
// footer
import Footer from './Footer/Footer';
class App extends Component {
constructor(props) {
super(props);
this.state = {
}
}
componentDidMount() {}
render () {
return (
<div className="App">
<HeaderAdmin/>
<Switch>
<Route exact path='/' component={Api_test} />
<Route path='/Api_test' component={Api_test} />
</Switch>
<Footer
footer_address={this.props.footer_address}
footer_tel={this.props.footer_tel}
footer_email={this.props.footer_email}
footer_mobile={this.props.footer_mobile}
/>
</div>
);
}
}
App.defaultProps = {
footer_address: '[34234] 서울특별시 강남구 삼성동 111-114',
footer_tel: '02-1234-5678',
footer_email: 'ljung5@naver.com',
footer_mobile: '010-3288-3398',
};
export default App
3. header 파일을 세팅한다.
react 경로 C:\react200\client\src\components에
Header폴더를 생성하고 Header admin이라는 이름의 js파일을 생성 후, 아래 소스를 붙여넣는다.
import React, {Component} from 'react';
import { Link } from 'react-router-dom';
class Header extends Component {
constructor(props) {
super(props);
this.state = {
usernm:'',
};
}
render () {
return(
<header className="gnb_box">
<div className="hd_top">
<div className="top_wrap ct1 af">
<ul className="hd_left af">
<li className="my1" onMouseEnter={this.myInfoHover} onMouseLeave={this.myInfoLeave}><b>내정보</b>
<div className="box0 box1">
<ul>
<li><a>내 정보 수정</a></li>
<li><a href="javascript:" onClick={this.logout}>로그아웃</a></li>
</ul>
</div>
</li>
<li className="my2"><b><span>0</span>알림</b>
</li>
</ul>
<div className="hd_right">
<p><span>'{this.state.usernm}'</span>님 반갑습니다.</p>
</div>
</div>
</div>
<div className="h_nav ct1 af">
<div className="logo">
<Link to={'/'}><img src={require("../../img/layout/logo.jpg")} height="65px" width="200px" alt=""/></Link>
</div>
<nav className="gnb gnb_admin">
<ul className="af">
<li className="menulist">
<Link to={'/UserApproval'}>사용자 관리</Link>
</li>
<li className="menulist">
<Link to={'/AdminResearchProject'}>Research Projects 관리</Link>
</li>
<li className="menulist">
<Link to={'/SoftwareList'}>Software Tools 관리</Link>
</li>
<li className="menulist">
<Link to={'/AdminDataSourceList'}>Data Sources 관리</Link>
</li>
{/* 드롭다운 이벤트 */}
<li className="menulist"><Link to={'/floatPopulationList'}>유동인구 조회</Link>
<ul className="gn_2">
<li><Link to={'/community/notice'}>공지사항</Link></li>
</ul>
</li>
<li className="menulist">
<Link to={'/SubCodeManage'}>Sub code 관리</Link>
</li>
</ul>
</nav>
</div>
</header>
);
}
}
export default Header;
4. footer 파일을 세팅한다.
react 경로 C:\react200\client\src\components에
Footer폴더를 생성하고 Footer이라는 이름의 js파일을 생성 후, 아래 소스를 붙여넣는다.
import React, { Component } from 'react';
class Footer extends Component {
render () {
return (
<footer className="footer">
<ul>
<li className="priv"><a href="#n">개인정보처리방침</a></li>
<li className="em_bt"><a href="#n">이메일주소무단수집거부</a></li>
</ul>
<div className="ft_p">
<span>주소 : {this.props.footer_address}</span>
<span>Tel : {this.props.footer_tel}</span>
{/* <span>Email : {props.footer_email}</span> */}
{/* <span>Mobile : {props.footer_mobile}</span> */}
</div>
<p>COPYRIGHT © 2019 RT-ROD, ALL RIGHTS RESERVED.{this.props.name}</p>
</footer>
);
}
}
export default Footer;
아래와 같은 화면이 나온다면 헤더와 푸터 세팅이 완료된 것이다.
5. 로그인(home) 화면을 세팅한다.
App.js 코드에 로그인파일(LoginForm)을 import하고 루트경로로 라우팅 처리한다.
import React, { Component } from 'react';
import { Route, Switch } from "react-router";
import Api_test from './Api_test'
// css
import '../css/new.css';
// header
import HeaderAdmin from './Header/Header admin';
// footer
import Footer from './Footer/Footer';
// login
import LoginForm from './LoginForm';
class App extends Component {
constructor(props) {
super(props);
this.state = {
}
}
render () {
return (
<div className="App">
<HeaderAdmin/>
<Switch>
{/* <Route exact path='/' component={Api_test} /> // root 경로일 경우 라우팅 */}
<Route exact path='/' component={LoginForm} />
<Route path='/Api_test' component={Api_test} />
</Switch>
<Footer
footer_address={this.props.footer_address}
footer_tel={this.props.footer_tel}
footer_email={this.props.footer_email}
footer_mobile={this.props.footer_mobile}
/>
</div>
);
}
}
App.defaultProps = {
// footer value
footer_address: '[34234] 서울특별시 강남구 삼성동 111-114',
footer_tel: '02-1234-5678',
footer_email: 'ljung5@naver.com',
footer_mobile: '010-3288-3398',
};
export default App
react 경로 C:\react200\client\src\components에
LoginForm.js 파일을 추가하고 아래 소스를 붙여넣는다.
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
class LoginForm extends Component {
render () {
return (
<section className="main">
<div className="m_login signin">
<h3><span><img src={require("../img/main/log_img.png")} alt="" />
</span>LOGIN</h3>
<div className="log_box">
<div className="in_ty1">
<span><img src={require("../img/main/m_log_i3.png")} alt="" /></span>
<input type="text" id="email_val" placeholder="이메일" />
</div>
<div className="in_ty1">
<span className="ic_2">
<img src={require("../img/main/m_log_i2.png")} alt="" />
</span>
<input type="password" id="pwd_val" placeholder="비밀번호" />
</div>
<ul className="af">
<li><Link to={'/register'}>회원가입</Link></li>
<li className="pwr_b" onClick={this.pwdResetClick}><a href="#n">비밀번호 재설정</a></li>
</ul>
<div className="s_bt" type="" onClick={(e) => this.submitClick(e)}>로그인</div>
</div>
</div>
<div className="m_login m_pw chgpw">
<h3 className="pw_ls">비밀번호 재설정 <span className="compl1">완료</span></h3>
<div className="log_box">
<div className="pw_one">
<div className="in_ty1">
<span><img src={require("../img/main/m_log_i3.png")} alt="" /></span>
<input type="text" id="reset_email_val" name="" placeholder="이메일"/>
</div>
<div className="in_ty1">
<span className=""><img src={require("../img/main/m_log_i1.png")} alt="" /></span>
<input type="text" id="reset_name_val" name="" placeholder="성명"/>
</div>
<div className="btn_confirm btn_confirm_m">
<div className="bt_ty bt_ty_m bt_ty1 cancel_ty1"
onClick={this.pwdResetCancleClick}>취소</div>
<a href="#n" className="bt_ty bt_ty_m bt_ty2 submit_ty1"
onClick={this.pwdResetConfim}>확인</a>
</div>
</div>
</div>
</div>
</section>
);
}
}
export default LoginForm;
아래와 같은 화면이 나온다면 홈(로그인)화면 세팅이 완료된 것이다.
6. 리스트 화면을 세팅한다.
App.js 코드에 유동인구 파일(floatingPopulationList)과
Software tools(AdminSoftwareList, AdminSoftwareView)파일을 import 하고
/floatPopulationList, /AdminSoftwareList, /AdminSoftwareView 경로로 호출될 때, 각각 라우팅 시킨다.
import React, { Component } from 'react';
import { Route, Switch } from "react-router";
import Api_test from './Api_test'
// css
import '../css/new.css';
// header
import HeaderAdmin from './Header/Header admin';
// footer
import Footer from './Footer/Footer';
// login
import LoginForm from './LoginForm';
// admin floatingPopulationList
import floatingPopulationList from './Floating_population/floatingPopulationList';
// admin softwareinfo
// import SoftwareList from './SoftwareToolsManage/SoftwareList';
// import SoftwareView from './SoftwareToolsManage/SoftwareView';
class App extends Component {
render () {
return (
<div className="App">
<HeaderAdmin/>
<Switch>
{/* <Route exact path='/' component={Api_test} /> // root 경로일 경우 라우팅 */}
<Route exact path='/' component={LoginForm} />
<Route path='/Api_test' component={Api_test} />
<Route path='/floatPopulationList' component={floatingPopulationList} />
{/* <Route path='/SoftwareList' component={SoftwareList} />
<Route path='/SoftwareView/:swtcode' component={SoftwareView} />*/}
</Switch>
<Footer
footer_address={this.props.footer_address}
footer_tel={this.props.footer_tel}
footer_email={this.props.footer_email}
footer_mobile={this.props.footer_mobile}
/>
</div>
);
}
}
App.defaultProps = {
// footer value
footer_address: '[34234] 서울특별시 강남구 삼성동 111-114',
footer_tel: '02-1234-5678',
footer_email: 'ljung5@naver.com',
footer_mobile: '010-3288-3398',
};
export default App
react 경로 C:\react200\client\src\components에 Floating_population폴더를 추가하고 floatingPopulationList.js 파일을 추가하고 아래 소스를 붙여넣는다.
아래코드에서 호출한 api는 SK telecom Big Data Hub에서 제공하는 open api이다. 아래 링크에서 회원가입후 AccessKey를 발급 받아야 사용할 수 있다.
https://www.bigdatahub.co.kr/product/view.do?pid=1002277
import React, { Component } from 'react';
import axios from "axios";
class floatingPopulationList extends Component {
constructor(props) {
super(props);
this.state = {
responseFPList: '',
append_FPList: '',
}
}
componentDidMount() {
this.callFloatPopulListApi()
}
callFloatPopulListApi = async () => {
axios.get('http://api.bigdatahub.co.kr/v1/datahub/datasets/search.json?pid=1002277&'+
'TDCAccessKey=f7c857088da5680d9cbbaf992adb71d391250f415151f4fcc7bd0801bb0d7fa4&$count=30', {
})
.then( response => {
try {
this.setState({ responseFPList: response });
this.setState({ append_FPList: this.FloatPopulListAppend() });
} catch (error) {
alert(error)
}
})
.catch( error => {alert(error);return false;} );
}
FloatPopulListAppend = () => {
let result = []
var FPList = this.state.responseFPList.data
var jsonString = JSON.stringify(FPList)
jsonString = jsonString.replace(/\(1시간단위\)/g, '')
jsonString = jsonString.replace(/\(10세단위\)/g, '')
var json = JSON.parse(jsonString)
for(let i=0; i<json.entry.length; i++){
var data = json.entry[i]
var idx = i+1
result.push(
<tr class="hidden_type">
<td>{idx}</td>
<td>{data.일자}</td>
<td>{data.시간}</td>
<td>{data.연령대}</td>
<td>{data.성별}</td>
<td>{data.시}</td>
<td>{data.군구}</td>
<td>{data.유동인구수}</td>
</tr>
)
}
return result
}
render () {
return (
<section class="sub_wrap" >
<article class="s_cnt mp_pro_li ct1 mp_pro_li_admin">
<div class="li_top">
<h2 class="s_tit1">서울시 유동인구 데이터 - 19년 11월</h2>
</div>
<div class="list_cont list_cont_admin">
<table class="table_ty1 fp_tlist">
<tr>
<th>Row</th>
<th>일자</th>
<th>시간</th>
<th>연령대</th>
<th>성별</th>
<th>시</th>
<th>군구</th>
<th>유동인구수</th>
</tr>
</table>
<table class="table_ty2 fp_tlist">
{this.state.append_FPList}
</table>
</div>
</article>
</section>
);
}
}
export default floatingPopulationList;
아래와 같이 데이터가 정상적으로 리스트로 노출된다면 성공.
https://taling.me/Talent/Detail/19341
강의 문의 : ljung5@naver.com
'탈잉 강의 자료 > 2020_비전공자도 가능한 웹 프로젝트' 카테고리의 다른 글
2-1강 : AWS 회원 가입, RDS 인스턴스 생성, DB 서버 연결 (0) | 2020.08.01 |
---|---|
1-4강 : AWS DB서버 연결, 데이터 조회해 리스트 페이지에 노출 (0) | 2020.08.01 |
1-2강 : react, node 개발환경 세팅, 프록시 설정 (0) | 2020.07.31 |
수업 목차 (0) | 2020.07.31 |
[비전공자도 가능한 웹 프로젝트] 개발부터 배포까지, 배우면서 완성(react,nodejs,mysql,aws) (0) | 2020.07.31 |