Reaguj niestandardowe haki
Hooki to funkcje wielokrotnego użytku.
Kiedy masz logikę komponentu, która musi być używana przez wiele komponentów, możemy wyodrębnić tę logikę do niestandardowego hooka.
Niestandardowe hooki zaczynają się od "use". Przykład: useFetch
.
Zbuduj hak
W poniższym kodzie pobieramy dane w naszym Home
komponencie i wyświetlamy je.
Do pobierania fałszywych danych użyjemy usługi JSONPlaceholder . Ta usługa doskonale nadaje się do testowania aplikacji, gdy nie ma istniejących danych.
Aby dowiedzieć się więcej, zapoznaj się z sekcją JavaScript Fetch API .
Skorzystaj z usługi JSONPlaceholder, aby pobrać fałszywe elementy „do zrobienia” i wyświetlić tytuły na stronie:
Przykład:
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 pobierania może być potrzebna również w innych komponentach, więc wyodrębnimy ją do niestandardowego hooka.
Przenieś logikę pobierania do nowego pliku, który ma być używany jako niestandardowy hook:
Przykład:
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"));
Przykład wyjaśniony
Stworzyliśmy nowy plik o nazwie useFetch.js
zawierający wywołaną funkcję, useFetch
która zawiera całą logikę potrzebną do pobrania naszych danych.
Usunęliśmy zakodowany na stałe adres URL i zastąpiliśmy go url
zmienną, którą można przekazać do niestandardowego hooka.
Na koniec zwracamy nasze dane z naszego Hooka.
W index.js
programie importujemy nasz useFetch
hook i wykorzystujemy go jak każdy inny hook. To tutaj przekazujemy adres URL, z którego pobieramy dane.
Teraz możemy ponownie użyć tego niestandardowego hooka w dowolnym komponencie, aby pobrać dane z dowolnego adresu URL.