반응형
라이브러리란
라이브러리 | 프레임워크 |
---|---|
개발 편의를 위한 도구의 모음 | 기반 구조까지 잡혀있음 |
공구 | 공장 |
리액트는 도구 모음
JSX, 컴포넌트의 상태관리, 렌더링 최정화, 성능확인
그 외에도 필요한 것들이 많음
이미 잘 만들어둔 도구들을 가져다가 쓰면서 리액트 생태계의 이점을 누리자
- 라이브러리 적용과정
- 필요 > 검색 > 사용법 파악 > 적용
- 필요
- 특정 기능이 필요해짐 (직접 구현하기에는 조금 벅참)
- 더 나은 도구가 필요해짐
- 트렌드에 따른 새로운 기술에 대한 호기심
- 검색
- 필요 그대로 검색
- github, npm trends, 프론트엔드 커뮤니티, 기술 블로그
- 유사한 라이브러리들을 후보로 비교 (기능, 성능, 사이즈, 인기, 최신, 등...)
- 사용법파악
- 공식 문서
- github 코드 검색 (실제 용례)
- 기술 블로그의 적용하기 예제
- 적용
- POC (Proof of concept)
- 프로젝트 일부에 적용
- 프로젝트 전체에 적용
다루게 될 라이브러리들
- Date 관련 (날짜표기, 계산도구)
- 스타일링 관련 (스타일링을 조금 더 편하게 도와주는 도구)
- 디자인 UI 관련 (미리 해둔 스타일일을 제공하는 도구)
- 애니메이션 관련 (애니메이션 기능을 미리 구현해두고 제공하는 도구)
- 모킹 관련 (데이터 페칭을 대체해주는 도구)
- 상태 관리 관련 (컴포넌트의 상태 관리를 도와주는 도구)
- 데이터 페칭 관련 (네트워크 통신을 도와주는 도구)
- GraphQL (REST api를 대체하는 도구)
- Next.js (SRR 등 최신 프론트엔드 기술을 제공해주는 도구)
사용법을 익히기보다는 찾고! 적용하는 과정을 익히자
Moment (Time / Date 라이브러리)
- 설치하기
npm install moment
npm install moment-timezone
- 연습예제
- 뉴욕시간대에서
- 2018년 3월 10일 13시에 하루 더하기
- 2018년 3월 10일 13시에 24시간 더하기
- 한국 시간대에서
- 2017년 1월 1일에 1년 빼기
- 2017년 1월 1일에 365일 빼기
//MomentExample.jsx
import React, { useRef, useState } from "react";
// import moment from 'moment';
import moment from "moment-timezone";
import "moment/locale/ko";
export default function MomentExample() {
const birthDayRef = useRef(null);
const [day, setDay] = useState("");
const handleBirthDayChange = (event) => {
setDay(moment(event.target.value, "YYYY-MM-DD").format("dddd"));
};
const momentDate = moment();
const newMomentDate = momentDate.add(1, "week");
const cloneNewMomentDate = newMomentDate.clone().add(1, "week");
return (
<div>
<h1>Moment</h1>
<div>Immutable Check</div>
<div>{momentDate.format()}</div>
<br />
<div>{newMomentDate.format()}</div>
<br />
<div>{cloneNewMomentDate.format()}</div>
<br />
<div>Summer Time (New-york)</div>
<div>
2018년 3월 10일 13시에 하루 더하기:
{moment.tz("2018-03-10 13:00:00", "America/New_York").add(1, "day").format()}
</div>
<div>
2018년 3월 10일 13시에 24시간 더하기:
{moment.tz("2018-03-10 13:00:00", "America/New_York").add(24, "hour").format()}
</div>
<br />
<div>Leap year(Korea)</div>
<div>
2017년 1월 1일에 1년 빼기:
{moment("2017-01-01").subtract(1, "year").format()}
</div>
<div>
2017년 1월 1일에 365일 빼기:
{moment("2017-01-01").subtract(365, "day").format()}
</div>
<br />
<div>한국어로 표기 (05-16-2022를 2022년 5월 16일로 표기)</div>
<div>{moment("05-16-2022").format("YYYY년 M월 DD일")}</div>
<br />
<div>두 날짜가 비교</div>
<div>
<input type="date" ref={birthDayRef} onChange={handleBirthDayChange} />
<div>무슨 요일이었을까?</div>
<div>{day}</div>
</div>
<br />
<div>두 날짜 비교</div>
<div>2021-07-17 03:00 와 2021-07-18 02:00는 몇시간 차이인가?</div>
<div>
{`${moment("2021-07-17 03:00").diff(moment("2021-07-18 02:00"), "hours")}
시간`}
</div>
<br />
</div>
);
}
최근 트렌드에서는 선호하지 않는다 (크기가 너무 크다)
Dayjs
- 설치하기
npm install dayjs
// DayjsExample.jsx
import React, { useRef, useState } from "react";
import dayjs from "dayjs";
import "dayjs/locale/ko";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";
// 한국어 가져오기
dayjs.locale("ko");
// time zone 적용하기
dayjs.extend(utc);
dayjs.extend(timezone);
export default function DayjsExample() {
const birthDayRef = useRef(null);
const [day, setDay] = useState("");
const handleBirthDayChange = (event) => {
setDay(dayjs(event.target.value, "YYYY-MM-DD").format("dddd"));
};
const dayjsDate = dayjs();
const newDayjsDate = dayjsDate.add(1, "week");
const cloneNewDayjsDate = newDayjsDate.add(1, "week");
return (
<div>
<h1>Day.js</h1>
<div>Immutable Check</div>
<div>{dayjsDate.format()}</div>
<br />
<div>{newDayjsDate.format()}</div>
<br />
<div>{cloneNewDayjsDate.format()}</div>
<br />
<div>Summer Time (New-york)</div>
<div>{dayjs.tz.guess()}</div>
<div>
2018년 3월 10일 13시에 하루 더하기:
{dayjs.tz("2018-03-13 13:00:00", "America/New_York").add(1, "day").format()}
</div>
<div>
2018년 3월 10일 13시에 24시간 더하기:
{dayjs.tz("2018-03-13 13:00:00", "America/New_York").add(24, "hour").format()}
</div>
<br />
<div>Leap year(Korea)</div>
<div>
2017년 1월 1일에 1년 빼기:
{dayjs("2017-01-01").subtract(1, "year").format()}
</div>
<div>
2017년 1월 1일에 365일 빼기:
{dayjs("2017-01-01").subtract(365, "day").format()}
</div>
<br />
<div>한국어로 표기 (05-16-2022를 2022년 5월 16일로 표기)</div>
<div>{dayjs("05-16-2022").format("YYYY년 M월 DD일")}</div>
<br />
<div>두 날짜가 비교</div>
<div>
<input type="date" ref={birthDayRef} onChange={handleBirthDayChange} />
<div>무슨 요일이었을까?</div>
<div>{day}</div>
</div>
<br />
<div>두 날짜 비교</div>
<div>2021-07-17 03:00 와 2021-07-18 02:00는 몇시간 차이인가?</div>
<div>
{`${dayjs("2021-07-17 03:00").diff(dayjs("2021-07-18 02:00"), "hours")}
시간`}
</div>
<br />
</div>
);
}
- 가볍다
- 문서도 정갈
- 간단한 기능들을 적용할 때는 좋을 듯
- 써보다가 필요한 기능이 추가로 있다면 다른 라이브러리 고려해봄직
Date-fns
- 설치하기
npm install date-fns
npm install date-fns-tz
// DateFnsExample.jsx
import React, { useRef, useState } from "react";
import dayjs from "dayjs";
import "dayjs/locale/ko";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";
import { add, format, sub, differenceInHours } from "date-fns";
import { format as timezoneFormat, toDate } from "date-fns-tz";
import addWeeks from "date-fns/addWeeks";
import { ko } from "date-fns/locale";
dayjs.locale("ko");
dayjs.extend(utc);
dayjs.extend(timezone);
export default function DateFnsExample() {
const birthDayRef = useRef(null);
const [day, setDay] = useState("");
const handleBirthDayChange = (event) => {
setDay(format(new Date(event.target.value), "EEEE", { locale: ko }));
};
const dateFnsDate = new Date();
const newDateFnsDate = add(dateFnsDate, { weeks: 1 });
const newDateFnsDate2 = addWeeks(newDateFnsDate, 1);
return (
<div>
<h1>Date-fns</h1>
<div>Immutable Check</div>
<div>{format(dateFnsDate, "yyyy-MM-dd")}</div>
<br />
<div>{format(newDateFnsDate, "yyyy-MM-dd")}</div>
<br />
<div>{format(newDateFnsDate2, "yyyy-MM-dd")}</div>
<br />
<div>Summer Time (New-york)</div>
<div>
2018년 3월 10일 13시에 하루 더하기:
{timezoneFormat(add(new Date("2018-03-10 13:00:00"), { days: 1 }), "yyyy-MM-dd HH:mm:ssXXX", {
timeZone: "America/New_York",
})}
</div>
<div>
2018년 3월 10일 13시에 24시간 더하기:
{timezoneFormat(
add(
toDate(new Date("2018-03-10 13:00:00"), {
timeZone: "America/New_York",
}),
{ hours: 24 }
),
"yyyy-MM-dd HH:mm:ssXXX",
{
timeZone: "America/New_York",
}
)}
</div>
<br />
<div>Leap year(Korea)</div>
<div>
2017년 1월 1일에 1년 빼기:
{format(sub(new Date("2017-01-01"), { years: 1 }), "yyyy-MM-dd")}
</div>
<div>
2017년 1월 1일에 365일 빼기:
{format(sub(new Date("2017-01-01"), { days: 365 }), "yyyy-MM-dd")}
</div>
<br />
<div>한국어로 표기 (05-16-2022를 2022년 5월 16일로 표기)</div>
<div>{format(new Date("05-16-2022"), "yyyy년 MM월 dd일")}</div>
<br />
<div>두 날짜가 비교</div>
<div>
<input type="date" ref={birthDayRef} onChange={handleBirthDayChange} />
<div>무슨 요일이었을까?</div>
<div>{day}</div>
</div>
<br />
<div>두 날짜 비교</div>
<div>2021-07-17 03:00 와 2021-07-18 02:00는 몇시간 차이인가?</div>
<div>
{`${differenceInHours(new Date("2021-07-17 03:00"), new Date("2021-07-18 02:00"))}
시간`}
</div>
<br />
</div>
);
}
// App.js
import MomentExample from "./components/Moment/MomentExample";
import DayjsExample from "./components/Dayjs/DayjsExample";
import DateFnsExample from "./components/DateFns/DateFnsExample";
function App() {
return (
<div>
<DateFnsExample />
<DayjsExample />
<MomentExample />
</div>
);
}
export default App;
라이브러리를 고르는 기준
라이브러리란?
라이브러리: 공구, 도구
라이브러리 도입과정: 필요 > 검색 > 사용법 파악 > 적용
사용법을 익히기 보다는 **찾고 / 적용하는 과정을 익히자
Moment
타임존: moment / timezone
Format / 비교: 원하는 스타일로 표기 가능
오래됨: Mutable, Tree shaking X
Day.js
타임존: plugin / timezone plugin/utc
Format / 비교: 원하는 스타일 표기 가능
가벼움: Tree shaking X
가벼운게 최우선일 경우 선택!
date-fns
타임존: date-fns-tz
Format / 비교: 원하는 스타일 표기 가능
포괄적인: Immutable , Tree shaking 까지
함수별 import: 가능 ex, addWeeks
FP패러다임을 따르거나 tree-shaking이 필요하다면 선택!
반응형
'개발 이야기 > Front-end' 카테고리의 다른 글
React 라이브러리 #2 (0) | 2023.03.22 |
---|---|
React 공식문서로 디테일 잡기 #6 (0) | 2023.03.21 |
React 공식문서로 디테일 잡기 #5 (0) | 2023.03.19 |
GraphQL 기본 #2 (0) | 2023.03.17 |
GraphQL 기본 (0) | 2023.03.16 |