Reagovat Custom Hooks
Háčky jsou opakovaně použitelné funkce.
Když máte logiku komponent, kterou je třeba používat pro více komponent, můžeme tuto logiku extrahovat do vlastního Hooku.
Vlastní háky začínají na „použití“. Příklad: useFetch
.
Postavte si háček
V následujícím kódu načítáme data v naší Home
komponentě a zobrazujeme je.
K načítání falešných dat použijeme službu JSONPlaceholder . Tato služba je skvělá pro testování aplikací, když neexistují žádná data.
Chcete-li se dozvědět více, podívejte se do sekce JavaScript Fetch API .
Použijte službu JSONPlaceholder k načtení falešných „úkolů“ a zobrazení názvů na stránce:
Příklad:
index.js
:
import { useState, useEffect } from "react";
import ReactDOM from "react-dom";
const Home = () => {
const [data, setData] = useState(null);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/todos")
.then((res) => res.json())
.then((data) => setData(data));
}, []);
return (
<>
{data &&
data.map((item) => {
return <p key={item.id}>{item.title}</p>;
})}
</>
);
};
ReactDOM.render(<Home />, document.getElementById("root"));
Logika načítání může být potřeba i v jiných komponentách, takže ji extrahujeme do vlastního Hooku.
Přesuňte logiku načtení do nového souboru, který bude použit jako vlastní Hook:
Příklad:
useFetch.js
:
import { useState, useEffect } from "react";
const useFetch = (url) => {
const [data, setData] = useState(null);
useEffect(() => {
fetch(url)
.then((res) => res.json())
.then((data) => setData(data));
}, [url]);
return [data];
};
export default useFetch;
index.js
:
import ReactDOM from "react-dom";
import useFetch from "./useFetch";
const Home = () => {
const [data] = useFetch("https://jsonplaceholder.typicode.com/todos");
return (
<>
{data &&
data.map((item) => {
return <p key={item.id}>{item.title}</p>;
})}
</>
);
};
ReactDOM.render(<Home />, document.getElementById("root"));
Příklad vysvětlen
Vytvořili jsme nový soubor s názvem useFetch.js
obsahující funkci nazvanou useFetch
, která obsahuje veškerou logiku potřebnou k načtení našich dat.
Odstranili jsme pevně zakódovanou adresu URL a nahradili ji url
proměnnou, kterou lze předat vlastnímu háku.
Nakonec vracíme naše data z našeho Hooku.
V index.js
, dovážíme náš useFetch
háček a používáme ho jako jakýkoli jiný háček. Zde předáváme adresu URL, ze které se mají načítat data.
Nyní můžeme tento vlastní Hook znovu použít v jakékoli komponentě k načtení dat z libovolné adresy URL.