반응형
1. Library 설치
yarn add recoil
2. 구성
/src
ㄴ components
* UserList.jsx
ㄴ recoil
* state.js
*App.js
*Index.js
3. 코드
(1) src/App.js
import React, { ErrorBoundary } from "react";
import { RecoilRoot } from "recoil";
import UserList from "./components/UserList";
function App() {
return (
<div className="App">
<RecoilRoot>
<React.Suspense fallback={<div>로딩중...</div>}>
<UserList />
</React.Suspense>
</RecoilRoot>
</div>
);
}
export default App;
(2) src/recoil/state.js
import { atom, selector } from "recoil";
export const userListState = atom({
key: "userListState",
default: [],
});
export const currentUserListQuery = selector({
key: "currentUserListQuery",
get: async ({ get }) => {
get(userListState);
const response = await fetch("https://jsonplaceholder.typicode.com/users");
return await response.json();
},
});
(3) src/components/UserList.jsx
App.js에서 React.Suspense를 사용할 경우 useRecoilValue를 사용할 수 있습니다. Suspense를 사용하지 않을 경우엔
비동기 전용 Hook인 useRecoilValueLoadable을 사용합니다.
import React from "react";
import { useRecoilValueLoadable, useRecoilValue } from "recoil";
import { currentUserListQuery } from "../recoil/state";
export default function UserList() {
const users = useRecoilValue(currentUserListQuery);
return (
<ul>
{users.map((user) => {
return (
<li key={user.id}>
{user.username} · {user.email}
</li>
);
})}
</ul>
);
}
반응형
'Programming > React' 카테고리의 다른 글
React에서 Kakao 지도 api 사용하기 (0) | 2021.08.10 |
---|---|
Gatsby 시작하기 (with Typescript) (0) | 2021.07.04 |
SWR을 활용한 비동기 요청 예제 (0) | 2021.06.29 |
React-query 를 활용한 비동기 요청 예제 (0) | 2021.06.29 |
Redux-Saga 를 활용한 비동기 요청 예제 (0) | 2021.06.29 |