솔미는 성장중

Recoil을 사용해보자 본문

면접 대비

Recoil을 사용해보자

solming 2023. 12. 4. 18:06
728x90

Recoil 이란?

 

React application 을 위한 상태 관리 라이브러리

react application의 모든 구성 요소가 상태를 쉽게 공유할 수 있도록 전역 상태를 제공하며 Redux에 비해 최소화된다.

 

장점

1. redux를 사용할 때처럼 초반 설정을 위한 복잡한 BoilderPlate 코드를 작성하는 부분이 최소화됨

2. 공식 라이브러리는 아니지만 페이스북에서 만들어진 것이기에 리액트와 호환이 잘 됨

 


Recoil 설치 방법

 

1. 리액트 설치

 npx create-react-app ./

 

2. recoil 설치

 npm install recoil --save

개념

 

Recoil Root

recoil 상태를 사용하는 컴포넌트는 recoil root가 필요하다. 루트 컴포넌트에 넣는 것이 가장 좋다.

//src/index.js

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <React.StrictMode>
    <RecoilRoot>
      <App />
    </RecoilRoot>
  </React.StrictMode>
);

 

Atom

상태(state)의 일부. Atoms는 어떤 컴포넌트에서나 읽고 쓸 수 있다.

atom 값을 읽는 컴포넌트들은 암묵적으로 atom을 구독한다.

그래서 atom에 어떤 변화가 있으면 그 atom을 구독하는 모든 컴포넌트들이 리렌더링된다.

 

key : 고유한 key 값. (보통 해당 atom을 생성하는 변수명으로 지정)

default : atom의 초기값을 정의.

//App.js
import { atom } from "recoil";

export const textState = atom({
  key: "textState",
  default: "",
});

 

컴포넌트가 atom을 읽고 쓰게 하기 위해서는 useRecoilState() 를 사용하면 된다.

//src/components/TextInput.js
import React from "react";
import { useRecoilState } from "recoil";
import { textState } from "../App";

const TextInput = () => {
  const [text, setText] = useRecoilState(textState);
  const handleChange = (event) => {
    setText(event.target.value);
  };
  return (
    <div>
      <input value={text} onChange={handleChange} />
      Echo: {text}
    </div>
  );
};

export default TextInput;

 

cf) recoil을 사용할 때 useRecoilValue() 또는 useSetRecoilState()를 사용할 필요없이 useRecoilState()를 사용하는 것으로 통일할 수 있을 것 같은데, 앞에 언급한 2가지 훅을 굳이 사용하는 이유가 뭘까?

더보기

1. 성능 최적화 : useRecoilValue()는 해당 Recoil 상태의 값을 읽기만 하기 때문에 리렌더링 성능에 최적화되어 있습니다. 만약 값이 변경될 때만 컴포넌트를 리렌더링하고 싶을 때 사용됩니다.useRecoilState()는 읽기와 쓰기 모두를 처리할 수 있습니다. 따라서 해당 Recoil 상태가 변경될 때마다 리렌더링될 것입니다. 이는 성능 최적화 측면에서 덜 효율적일 수 있습니다.

2. 코드의 의도 표현 : useSetRecoilState()는 Recoil 상태의 값을 변경할 때 사용됩니다. 만약 상태의 값을 변경하고 리렌더링을 유발하지 않으려면 useSetRecoilState()를 사용하는 것이 더 명시적일 수 있습니다. 이렇게 하면 코드에서 해당 상태가 어떻게 변경되는지 더 명확하게 나타낼 수 있습니다.

3. 가독성과 유지보수 : 코드의 가독성과 유지보수성을 고려할 때, 읽기와 쓰기가 분리된 상태로 유지하는 것이 코드를 이해하기 쉽게 만들 수 있습니다. useRecoilValue()는 해당 상태의 값을 읽을 때만 사용되고, useSetRecoilState()는 해당 상태를 변경할 때만 사용되는 경우 코드의 의도를 명확하게 전달할 수 있습니다.


결국, Recoil의 훅들은 코드의 의도와 상태 관리를 명확하게 하기 위해 세분화되어 제공됩니다. 각 훅이 특정한 상황에 최적화되어 있어, 개발자는 상태의 읽기, 쓰기, 갱신을 명확하게 이해하고 코드를 작성할 수 있습니다. 따라서 필요에 따라 적절한 훅을 선택하여 사용함으로써 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

 

Selector

selector는 atom 혹은 다른 Selector 상태를 입력받아 동적인 데이터를 반환하는 순수 함수.

selector가 참조하던 다른 상태가 변경되면 이도 같이 업데이트되며, 이때 selector를 바라보던 컴포넌트들이 리렌더링된다.

 

key : 고유한 key 값. 

get : selector 순수 함수. 사용할 값을 반환하며, 매개변수인 콜백 객체 내 get() 메서드로 다른 atom 혹은 selector를 참조

 

 

 

 

728x90

'면접 대비' 카테고리의 다른 글

[React 면접 대비] 가상돔 & react 공식문서(state)  (0) 2023.09.17
[React 면접대비]  (0) 2023.09.09
[면접 대비]  (0) 2023.09.05
[TS 면접 대비]  (0) 2023.09.02