태그를 생성하고 css를 꾸밀수 있고, 변수를 활용할 수 있다.(1번은 일반, 2번은 타입스크립트버전 설치)
npm i styled-components // 일반.ver
npm i --save-dev @types/styled-components // typescript.ver
react-router-dom
BrowserRouter, Routes, Route, Link등의 컴포넌트를 사용하여 설정한 경로에 따라 페이지를 렌더링해주는걸 도와준다.
react route dom이 v6이상으로 올라오면서 사용법이 대체적으로 변경되었다.
(예를들면 Link to prop에 object형태로 옵션을 줄 수 있었으나 각각 prop형태로 적용하도록 변경되었고, 기존에 Switch의 컴포넌트 대신 Routes로 변경되었다.)
npm i react-router-dom
react-query
useQuery를 사용하여 fetch함수등을 사용하여 api로 데이터를 요청하고 받아오던 행위들을 모아놓고 모듈화를 도와준다.
또한 데이터를 캐싱시켜서 페이지 로드시 속도 개선에도 도움을 준다.
npm i @tanstack/react-query
react-helmet
사용하면 어디서든 해당 페이지 document의 head태그로 접근 할 수 있다.
title이나 favicon, css, meta태그등 다양하게 접근하고 변경할 수 있도록 도와준다.
npm i --save-dev @types/react-helmet
recoil
React의 state management 라이브러리로 페이스북에서 만들었다.
redux와 비슷한 개념으로 사용이 간편하고 쉽다 atom을 사용하여 어디서든 state에 접근하고 사용할 수 있으며, atom의 데이터를 원하는 형태로 변형하여 읽기전용 느낌의 seletor를 사용할 수도 있다.
npm install recoil
react-hook-form
form태그와 input, select등 form입력의 다양한 키입력 온클릭등의 이벤트 처리와 유효성을 도와준다.
npm install react-hook-form
react-beatiful-dnd
React프로젝트에서 드래그 앤 드랍처리를 도와주는 라이브러리다.
DragDropContext와 Droppable, Draggable 영역에 대한 이해와 magic(provider), snapshot의 대한 공부를 하고 작성하면 생각보다 쉽게 이벤트 처리를 할 수 있고, 드래그중 드래그 완료 후 각각의 요소별로 css등의 처리를 할 수 있다.
npm i react-beautiful-dnd // 일반.ver
npm i --save-dev @types/react-beautiful-dnd // typescript.ver
framer-motion
react페이지의 인터렉티브한 효과를 도와주는 애니메이션 라이브러리입니다.
간단한 prop이나 layout속성 추가만으로 컴포넌트간의 애니메이션을 연결해주거나 처리해줄수 있습니다.
그렇다보니 데이터를 가지고 놀때 useState를 통해 값을 처리하고 setState를 통해 변경하고 변경된 UI부분만 재 처리하는 작업을 반복하는데, 해당값을 상위의 컴포넌트부터 최하단의 컴포넌트까지 복잡한 구조를 props를 통해 넘겨야한다면 굉장히 불필요한 데이터 전달처리로 소스도 난잡해지고 중간 중간의 컴포넌트들은 사용하지도 않는 props데이터를 넘기다보니 처음 소스를 받는사람은 이건 뭔데 넘기고 있을까? 라는 생각을 가질 수도 있을 것이다.
이럴때 전역 state처리를 해주는 redux나 recoil이 있는데, recoil에 대하여 알아보고자 한다.
Recoil
recoil은 state management 라이브러리로 페이스북팀에서 만들었고, 굉장히 간결하고 강력하다.
실제 예시를 보고 개념도 쉽고 그림도 잘 그려져서 너무 좋았다.
설치하기
먼저 사용을 해보기 위해 설치를 해야한다.
npm install recoil
설치가 끝나면 recoil설정 파일이 필요하다.
recoil에서 특정 전역처리를 하는 영역 덩어리를 atom이라고 부른다.
atoms.ts파일을 열어주고
전역 state를 처리할 값을 입력해주고 필요한 부분들에서 불러서 사용하면 된다.
그 전에 전체를 RecoilRoot로 App을 감싸주는걸 잊지 말자!
-atom
atoms.ts
import { atom } from "recoil";
export const isDarkAtom = atom({
key: "isDark",
default: true,
})
atom에는 key와 default값을 object형태로 넣어준다.
key값은 global state로 사용할 key값이고, default는 기본 값이다. 기본값으로 인해 자료형도 선택이 된다.
- useRecoilValue
전역 state값 불러오기
파라미터에는 호출할 atom을 넣어줍니다.
import { isDarkAtom } from "../atoms";
import { useRecoilValue } from "recoil";
const isDark = useRecoilValue(isDarkAtom);
- useSetRecoilState
전역 state값 변경하기
파라미터에는 호출할 atom을 넣어줍니다.
import { isDarkAtom } from "../atoms";
import { useSetRecoilState } from "recoil";
const setIsDark = useSetRecoilState(isDarkAtom);
setIsDark(true); //atom의 state값 변경
- 값불러오고 변경하기를 useState처럼 처리하기
파라미터에는 호출할 atom을 넣어줍니다.
import { useRecoilState } from "recoil";
import { isDarkAtom } from "../atoms";
const [isDark, setIsDark] = useRecoilState(isDarkAtom);
console.log(isDark);
setIsDark(true);
많이 보던 형태가 아닐까 싶습니다.
바로 useState랑 생김새가 똑같습니다.
값만 불러야하거나 변경만 해야하면 위에서처럼 하나만 import해서 쓰면 되지만, 둘다 필요한 경우에는 해당 방식이 좋아보입니다. :)
react-hook-form을 사용하여 form태그 내의 input태그의 onChange이벤트, 유효성 검사, submit후 데이터 값 확인 등 다양한 작업을 손쉽게 처리 할 수 있습니다.
기존의 react를 사용하여 해당 기능을 처리하려면 useState를 통해 처리할 값고 set함수를 선언하고 onChange이벤트에 넣어주고 value값에 state값을 넣어주고, 유효성을 체크하려면 onChange에 걸어둔 함수에서 길이를 체크하거나 정규식으로 패턴을 검사하거나 한개의 input만 해도 아주 복잡한 코드가 만들어지는데, 복잡한 회원가입이나 입력폼에서 이 과정을 실행하려면 상당한 긴 소스가 작성될 것입니다. 이런 문제를 간단하게 해결해 줄 수 있습니다.
먼저 설치를 진행합니다.
npm install react-hook-form
기본적으로 사용을 위해서 useForm이라는 hook을 항상 import해서 사용합니다.
import { useForm } from "react-hook-form"
1. register
register는 input 기능에 특화되어 있는 함수로 onBlur, onChange를 가지고 있는 함수입니다.
처리하고자 하는 input태그 내에 {...register("name")} 하나만으로 모든 처리가 끝납니다.