- Today
- Total
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
Tags
- Firebase
- 차트
- 채팅
- apollo
- error
- 비전공자
- 차트만들기
- 에러
- typeorm
- 코인
- Flutter
- websocket
- chart
- 리액트
- Redux
- 주식차트
- 코인차트
- rtk
- API
- nextjs
- Coin
- typescript
- 차트구현
- 항해99
- react
- javascript
- 3주차
- 주식
- nestjs
- graphql
Archives
Act99 기술블로그
[React] 직접 주가 캔들 차트 만들기 - 코드정리2 본문
전 글에서 코드의 문제점들을 해결한다고 언급한 바가 있다.
https://bugerstory.tistory.com/39
결과부터 말하면 700 줄이나 되던 handmade-chart.tsx 코드는 100줄로 줄일 수 있었다.
먼저 해결한 것은 데이터 배열을 분류시키는 코드를 단축시킨 것이다.
전에 코드는
// array 데이터들 분류
const stockOpen = stockArray.map((item) => item.open);
const openArray: number[] = [];
stockOpen?.forEach((open) => openArray.push(open));
const stockClose = stockArray.map((item) => item.close);
const closeArray: number[] = [];
stockClose?.forEach((close) => closeArray.push(close));
const stockVolume = stockArray.map((item) => item.volume);
const volumeArray: number[] = [];
stockVolume?.forEach((volume) => volumeArray.push(volume));
const stockDate = stockArray.map((item) => item.date);
const dateArray: string[] = [];
stockDate?.forEach((date) => dateArray.push(date.toString()));
const stockHigh = stockArray.map((item) => item.high);
const highArray: number[] = [];
stockHigh?.forEach((high) => highArray.push(high));
const stockLow = stockArray.map((item) => item.low);
const lowArray: number[] = [];
stockLow?.forEach((low) => lowArray.push(low));
const stockName = stockArray.map((item) => item.code_name);
const nameArray: string[] = [];
stockName?.forEach((name) => nameArray.push(name));
const stockClo5 = stockArray.map((item) => item.clo5);
const clo5Array: number[] = [];
stockClo5?.forEach((clo5) => clo5Array.push(clo5));
const stockClo20 = stockArray.map((item) => item.clo20);
const clo20Array: number[] = [];
stockClo20?.forEach((clo20) => clo20Array.push(clo20));
const stockClo60 = stockArray.map((item) => item.clo60);
const clo60Array: number[] = [];
stockClo60?.forEach((clo60) => clo60Array.push(clo60));
이렇게 길었지만,
export const dataToArray = (dataArray: any[], order: number) => {
const resultArray: any[] = [];
dataArray
.map((item) => item[order])
.forEach((item) => resultArray.push(item));
return resultArray;
};
이 함수 하나를 만들어 요약시켰다.
여기서 중요한 것은 [Object] 형식의 데이터 배열을 [value] 형식으로 변환시켰다는 점이다.
그리고 배열의 value 순서를 이용해 데이터를 분류시켰다.
(Object의 key 값을 이용해 데이터를 분류시키려 했지만 map 을 사용하는 과정에서 인수들을 가져올 수 없었다 ㅠㅠ)
두 번째로 handmade-chart.tsx 의 차트 컴퍼넌트들을 모두 컴퍼넌트 폴더에 옮겨주었다.
세 번째로 함수들을 모두 functions 폴더에 넣어 exports 시켜주었다.
이것으로 좀 더 가독성이 좋아졌다.
네 번째로 gql Query 문을 모두 gql-query 폴더로 옮겨주었다.
마지막으로 해야할 일은 Redux 를 이용해 type을 불러올 필요 없게 만드는 것이다.
현재 Redux 공식 사이트 예제 등을 공부했으며, 실제 적용할 예정이다.
https://github.com/act99/stock-frontend
'개발팁저장소 > react' 카테고리의 다른 글
[React] 주식사이트 만들기-2 코인API 가져오기 (with Redux toolkit) (0) | 2021.12.06 |
---|---|
[React] 직접 주가 캔들 차트 만들기 - 네비게이션 바 만들기 navbar & tabbar (0) | 2021.12.03 |
[React] 직접 주가 캔들 차트 만들기 - 코드정리1 (SVG 연습용), (차트라이브러리 x) (0) | 2021.12.02 |
[React] 직접 주가 캔들 차트 만들기6 - 볼린저 밴드 만들기 (SVG 연습용), (차트라이브러리 x) (0) | 2021.12.01 |
[React] 직접 주가 캔들 차트 만들기5 (이동평균선 추가) (SVG 연습용) (0) | 2021.12.01 |