Open min000 opened 2 years ago
Reset CSS https://github.com/zacanger/styled-reset/blob/master/src/index.ts
Google Fonts https://fonts.google.com
Flat UI Color https://flatuicolors.com/palette/gb
Coin API https://api.coinpaprika.com/v1/coins
npm i react-helmet
setting
> pages
> 브랜치 gh-pages
선택 (public
시 가능) https://min000.github.io/react-for-master
에서 https://min000.github.io
를 기본경로, /react-for-master
를 path로 인식.
<BrowserRouter basename={process.env.PUBLIC_URL}>
변수!
: TypeScript에서 null이나 undefined가 되지않을 것이라는 강제 알림
react-router-dom
설치
특징
url을 가짐 => path
1. setup
Router.tsx
react-router-dom
버전 6.0.0부터Switch
가Routes
로 변경react-router-dom
은 url을 갖도록 해줌/
뒤에 값이 없을 때는 HomeCoins
으로 이동/
뒤에 값이 있을 때는 값을 IdcoinId
에 담아 DetailCoin
으로 이동function Router(){ return (
} export default Router;
/Routes/Coin.tsx
useParams
으로 URL에 있는 정보를 가져옴useParams
이 coinId를 포함하는 object를 반환할 것을 알려줌.// 2. function Coin(){ const {coinId} = useParams<{coinId:string}>(); ...
2. CSS setup
reset css
1. styled-reset
2. createGlobalStyle
createGlobalStyle
의 컴포넌트는 랜더링시 전역 스코프에 스타일을 줌const GlobalStyle = createGlobalStyle
body { line-height: 1; } ... // 초기화 속성값 선언
;function App(){ return ( <>
); }
theme props style
// App.tsx const GlobalStyle = createGlobalStyle
body { background-color:${(props) => props.theme.bgColor}; color:${(props) => props.theme.textColor} } ...
3. Home
styled Components
const Container = styled.div
; const Header = styled.header
; const CoinsList = styled.ul; const Coin = styled.li
; const Title = styled.h1``;function Coins() { return
); } export default Coins;
a
태그 대신Link
로 사용Link
는 Dom에서a
태그로 뱉음Link to
의value
는Route path
에 들어가는value
// route/coins.tsx <Link to={
/${coin.id}
}>{coin.name} →Data API 연동
API Data를 TypeScript에 설명
컴포넌트 시작시 data fetch
useEffect
내에서async
await
사용state로 데이터 전달 및 변경
slice
useEffect(() => { (async() => { const response = await fetch("https://api.coinpaprika.com/v1/coins"); const json = await response.json(); setCoins(json.slice(0,100)); setLoading(false); })(); },[]);
즉시실행함수
4.Route State
코인 icon 이미지를 제공
screen 이동시 데이터 전달하는 방법
1. parameter로 URL에 데이터를 넘김
2. state
coin.id
: URL parametercoin.name
: state2-1. state 전달하는 방법
Link Component 옵션
2-2. state 전달받는 방법
coin 페이지에서 loading이 발생하지 않는다.
react-router-dom에서 보내주는 location object에 접근 =>
useLocation
home을 통해 접근
하는 방법과url에서 바로 접근
하는 방법이 있음?
: state가 있으면 state.name을 출력 없으면 "Loading을 출력"5. Coin Data
datail (coin)페이지
Data API
data 확인
캡슐화
// 캡슐화 후 (async() => { const infoData = await (await fetch(
https://api.coinpaprika.com/v1/coins/${coinId}
) ).json();})();
interface PriceData { id: string; ... quotes: { USD:{ ath_date: string; ath_price: number; ... } } ... }
function Coin(){ const {price,setPrice} = useState();
}
Price
Chart
Tab과 route 연결하기
nested route를 사용해서 Link로 값을 넘김
coinId
:useParams
으로 가져온 URL경로현재 route 체크
useRouteMatch
: 현재 route의 URL에 특정값 여부를 판단함.isExact:true
없으면null
8. React Query
// index.tsx import { QueryClient, QueryClientProvider } from 'react-query';
... const queryClient = new QueryClient();
ReactDOM.render(
Chart
; } export default Chart; ``` - 시간대별 API fetch - [Coin paprika](https://api.coinpaprika.com/#tag/Coins/paths/~1coins~1{coin_id}~1ohlcv~1historical/get) - 14일 전부터 데이터 가져오기 ```javascript // Api.tsx export function fetchCoinHistory(coinId: string) { // Date.now()는 millisecond으로 전달함. 초로 변경 const endDate = Math.floor(Date.now() / 1000); // 초 * 분 * 시간 * 일수 const startDate = endDate - 60 * 60 * 24 * 7 * 2; return fetch(`${BASE_URL}/coins/${coinId}/ohlcv/historical?start=${startDate}&end=${endDate}`).then((response) => response.json() ); } // Chart.tsx import { useQuery } from "react-query"; import { fetchCoinHistory } from "../api"; ... interface IHistorical { "time_open": string, "time_close": string, "open": number, "high": number, "low": number, "close": number, "volume": number, "market_cap": number } function Chart({coinId}:ChartProps) { // 14개의 object => 배열로 가져옴 const {isLoading,data} = useQueryChart
; } export default Chart; ``` ### APEX CHARTS - javascript chart library - API로 받은 Data 시각화 - [APEX CHARTS](https://apexcharts.com/) , [React APEX CHARTS Doc](https://apexcharts.com/docs/react-charts/) -설치 ``` npm install --save react-apexcharts apexcharts ``` - import - Chart Component가 있으니 이름 변경 ```javascript // import Chart from "react-apexcharts"; import ApexChart from "react-apexcharts"; ``` - 주요 Props - `series` : chart를 그려줄 Data ```javascript