跳到主要内容
版本:1.0

useFetch

信息

获取数据

1.实现

import { useState, useEffect } from "react";

const useFetch = (url = "", options = null) => {
const [data, setData] = useState(null);
const [error, setError] = useState(null);
const [loading, setLoading] = useState(false);

useEffect(() => {
let isMounted = true;

setLoading(true);

fetch(url, options)
.then((res) => res.json())
.then((data) => {
if (isMounted) {
setData(data);
setError(null);
}
})
.catch((error) => {
if (isMounted) {
setError(error);
setData(null);
}
})
.finally(() => isMounted && setLoading(false));

return () => (isMounted = false);
}, [url, options]);

return { loading, error, data };
};

export default useFetch;

2.使用

import useFetch from "./useFetch";

const App = () => {
const {
loading,
error,
data = [],
} = useFetch("https://hn.algolia.com/api/v1/search?query=react");

if (error) return <p>Error!</p>;
if (loading) return <p>Loading...</p>;

return (
<div>
<ul>
{data?.hits?.map((item) => (
<li key={item.objectID}>
<a href={item.url}>{item.title}</a>
</li>
))}
</ul>
</div>
);
};