4. useSWR() I
SWR is a popular library of data fetching.
Let's try to implement the basic usage by ourselves
- this is not to replicate the true implementation of useSWR()
- The first argument key is for deduplication, we can safely ignore it for now
solutions:
- We don't care about _key
- fetcher should be Promise, if it's not ,return data
- we should get return data and err, so we should setData and setError inside then and catch
You can see my github file src/views/react/SWR.jsx (opens in a new tab)
import {useEffect, useState} from 'react';
function useSWR(_key, fetcher) {
const fetchRes = fetcher();
const [data, setData] = useState(fetchRes instanceof Promise ? undefined : fetchRes);
const [error, setError] = useState();
useEffect(() => {
if (fetchRes instanceof Promise) {
Promise.resolve(fetchRes)
.then(res => setData(res))
.catch(err => setError(err))
}
}, []);
return {data, error};
}
function Swr() {
const fetcher = () => {
return Promise.resolve('succeeded');
//return Promise.reject('err');
};
const { data, error } = useSWR('/api', fetcher)
if (error) return <div>failed</div>
if (!data) return <div>loading</div>
return <div>{data}</div>
}
export default Swr;