Full Stack 교육 회고록
10/5(수) React-[useEffect, 영화 데이터 리액트로 바꾸기]
순두부 호랑이
2022. 10. 5. 17:48
728x90
SMALL
오전 React
[리액트 훅]
1.useEffect(()=>{로직 작성} [ ] )
화면이 렌더링 되자마자 화면에 처음 보여져야할 데이터들을 다룬다
<app.js>
import './App.css';
import Ex01 from './Example/Ex01'
import Ex02 from './Example/Ex02';
import Ex03 from './Example/Ex03';
import Ex04 from './Example/Ex04';
import Ex05 from './Example/Ex05';
import Ex06 from './Example/Ex06';
import Ex07 from './Example/Ex07';
import Ex08 from './Example/Ex08';
function App() {
return (
<div>
{/* ex01 : useState 개념, React Event 개념 */}
{/* <Ex01/> */}
{/* ex02: useState 좋아요 예제 */}
{/* <Ex02/> */}
{/* ex03: useState를 활용한 랜덤숫자게임 */}
{/* <Ex03/> */}
{/* ex04: Map 함수를 활용한 발복 컴포넌트 생성 */}
{/* <Ex04/> */}
{/* ex05: Map 함수를 활용한 콜렉션 실습! */}
{/* <Ex05/> */}
{/* ex06: 미니실습! - 댓글달기 */}
{/* <Ex06/> */}
{/* ex07 : 클래스 컴포넌트 */}
{/* <Ex07/> */}
{/*ex08: useEffect */}
<Ex08/>
</div>
);
}
export default App;
<Ex08.js useEffect>
import React, { useEffect, useState } from 'react'
const Ex08 = () => {
//a. constructor 대체
// => 변수 초기화, state 관리
console.log('a. 함수 초기화')
const [num, setNum] = useState(0)
const btnCk = () => {
setNum(num+1)
}
// c. 화면 mount
// useEffect(()=>{},[]) => API Call
useEffect(()=>{
console.log('c. Mount')
},[])
//d. 값 update
//useEffect(()=>{},[변화를 감지할 대상])
//변화를 감지하는 대상은 복수가 될 수도 있다
useEffect(()=>{
console.log('update!')
},[num])
return (
<div>
{/* b. render 대체 => 화면 구성 요소 */}
{console.log('b.rendering')}
<p>{num}</p>
<button onClick={btnCk}>+1</button>
</div>
)
}
export default Ex08
[영화진흥위원회 오픈 API]
일별 박스오피스
JSON
http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=20120101
[axious 설치]
[axious import 하기]
** console 창 글자 => key 값 숫자 => 배열 인덱스 ** JSON {} => 객체 [] => 배열 ** 데이터 접근 1) 객체 객체이름. key 2) 배열 배열이름 [인덱스 번호] |
우리가 가진 데이터를 테이블 형식으로 렌더링 - useState - useEffect - map(table과 tbody는 반복되지 않는다) |
[ex09. 영화 데이터 리액트로 바꾸기]
import React, { useEffect, useState } from 'react'
import axios from 'axios'
//Q1. 영화 데이터를 테이블 형태로 렌더링
// 랭킹- 영화제목 - 개봉일자
// React JSX 특징 <table>를 <thead> <tbody> 없이 사용 불가
//<table>
//<tbody>
// <tr> td*3</tr>
// </tbody>
// </table>
const Ex09 = () => {
const[data,setData] = useState([])
let month =['01','02','03','04','05','06','07','08','09','10']
const getData = (selectMonth) =>{
console.log('원하는 달',selectMonth)
let url = `http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=f5eef3421c602c6cb7ea224104795888&targetDt=2022${selectMonth}01`
axios
.get(url)
.then((res)=>{
//영화 순위가 모여있는 배열 : data
//영화 이름 : movieNm / 개봉일자: openDt / 랭킹 : rank
setData(res.data.boxOfficeResult.dailyBoxOfficeList)
console.log(data)
})
.catch(()=>{alert('error!')})
}
useEffect(()=>{
//현재 날짜 => 몇월
let todayMonth = new Date().getMonth()+1
getData(todayMonth)
},[])
const btnCk = (e)=>{
console.log(e.target.value)
getData(e.target.value)
}
return (
<div>
<h1>2022년 올해의 영화</h1>
<p>매달 1일 순위를 보여드립니다</p>
{/* 버튼 생성 */}
{month.map((item)=>(<button onClick={btnCk} value={item} key={item}>{item}월</button>))}
<table>
<tbody>
{/* 여기서부터 반복 시작! */}
{data.map((item)=>(
<tr key={item.rank}>
<td>{item.rank}</td>
<td>{item.movieNm}</td>
<td>{item.openDt}</td>
</tr>
))}
</tbody>
</table>
</div>
)
}
export default Ex09
오후 spring
728x90
LIST