[React] 고객으로부터 데이터를 신속하게 얻을 수 있는 SWR 사용 방법
21606 단어 JavaScriptReactSWRtech
SWR이란?
SWR은 데이터 추출에 사용되는 ReactHook 라이브러리 중 하나로 Stale-while-revalidate의 이름에서 유래했다.
이른바 Stale-while-revalidate는 캐시를 먼저 표시하고 서버에 캐시 업데이트를 요청하는 캐시 관리 방법이다.
업데이트된 캐시는 다음 같은 요청이 버려질 때 사용합니다.
이stale-while-revalidate를 통해 데이터가 지속적으로 업데이트되고 데이터가 더 빨리 표시됩니다.
SWR 설치
먼저 설치가 필요합니다.객체의 항목에 다음 명령 중 하나를 입력합니다.
yarn add swr
npm install swr
SWR 사용
그럼 SWR을 실제로 사용해 보세요.다음 원본은 데이터를 가져올 때 데이터를 직접 표시합니다.
import useSWR from 'swr'
//fetcher関数の作成
const fetcher = url => fetch(url).then(r => r.json())
export default function index () {
const { data, error } = useSWR('/api/user', fetcher)
//エラー
if (error) return <div>failed to load</div>
//ロード中
if (!data) return <div>loading...</div>
//成功
return <pre>{JSON.stringify(data, null, 2)}</pre>
}
usesWR 갈고리를 사용하여 데이터를 얻습니다.또한usesWR 갈고리의 반환값 데이터와 error의 2개를 반환합니다.이 두 데이터에 따르면 세 가지 요청 상태가 있다.
캐시를 이용한 간편한 쓰기
SWR을 사용할 수 있는 장점은 캐시를 이용해 요청 횟수를 줄이면서 코드를 간결하게 쓸 수 있다는 것이다.
일반 데이터 가져오기
예를 들어 전통적인 방법으로 데이터를 얻으려면 부모 구성 요소에서 얻은 데이터를 각 구성 요소에 전달해야 한다.
다음 원본은 부모 구성 요소가 처음 나타날 때useEffect를 통해 데이터를 가져오고 사용자 정보를 Avatar와Conntent에 전달합니다.
//ページ表示
export default function Index () {
//ユーザー情報
const [user, setUser] = useState(null)
//初期表示時にデータフェッチ
useEffect(() => {
fetch('/api/user')
.then(res => res.json())
.then(data => setUser(data))
}, [])
//ロード中
if (!user) return <p>Loading ...</p>
//成功
return <div>
<Avatar user={user} />
<Content user={user} />
</div>
}
//コンテンツ
function Content ({ user }) {
return <h1>ようこそ {user.name}さん</h1>
}
//アバター
function Avatar ({ user }) {
const avatar_style = {
borderRadius : "50%",
width : "50px",
}
return <img
src={user.avatar}
alt={user.name}
style={avatar_style}/>
}
SWR을 사용하여 데이터를 가져오는 방법
그러나 SWR을 사용하여 연결고리를 만들면 교부 매개 변수의 처리가 사라지고 부모 구성 요소와 서브 구성 요소의 의존 관계를 줄일 수 있다.
import useSWR from 'swr'
//フェッチ関数(JSON形式に変換)
const fetcher = url => fetch(url).then(r => r.json())
//ユーザー情報の取得
function useUser () {
const { data, error } = useSWR(`/api/user`, fetcher)
return {
user: data,
isLoading: !error && !data,
isError: error
}
}
//ページ表示
export default function Index () {
return (
<div>
<Avatar />
<Content/>
</div>
)
}
//コンテンツ
function Content () {
const { user, isLoading } = useUser(); //ユーザー情報の取得
if (isLoading) return <p>Loading ...</p> //ロード中
return <h1>ようこそ {user.name}さん</h1>
}
//アバター
function Avatar () {
const avatar_style = {
borderRadius : "50%",
width : "50px",
};
const { user, isLoading } = useUser() //ユーザー情報の取得
if (isLoading) return <p>Loading ...</p> //ロード中
return <img
src={user.avatar}
alt={user.name}
style={avatar_style}/>
}
각 데이터가 필요한 경우useser 연결을 이용하여 모부품은 불필요한 데이터(user)를 저장할 필요가 없다.이렇게 되면 각자 독립된 구성 요소가 되어 유지보수성을 높일 수 있다.
클릭 횟수 한 번에 완성
하지만 이 소스를 보고 많은 사람들이 걱정하는 것은 주문 횟수죠.이전의 방법은useEffect에서 한 번 호출을 통해 데이터를 얻었지만 SWR에서는 두 번 호출되었다.
사실 이 경우에도 SWR을 사용하면 한 번의 요청을 해결할 수 있다.usesWR은 같은 키(URL)를 지정하기 때문에 자동으로 캐시합니다.
이렇게 SWR을 사용하면 불필요한 요구를 줄이고 코드를 간단하게 쓸 수 있다.
참고 자료
Reference
이 문제에 관하여([React] 고객으로부터 데이터를 신속하게 얻을 수 있는 SWR 사용 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/syu/articles/9a6a5a43e49610텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)