Latviešu

Atklājiet atkārtoti izmantojamas loģikas spēku savās React lietojumprogrammās ar pielāgotajiem hukiem. Uzziniet, kā izveidot un izmantot pielāgotos hukus tīrākam un vieglāk uzturēmam kodam.

Pielāgotie Huki: Atkārtoti Izmantojami Loģikas Raksti React

React Huki radīja revolūciju veidā, kā mēs rakstām React komponentes, ieviešot stāvokļa (state) un dzīves cikla funkcijas funkcionālajās komponentēs. Starp daudzajām priekšrocībām, ko tie piedāvā, pielāgotie huki izceļas kā spēcīgs mehānisms loģikas izvilkšanai un atkārtotai izmantošanai vairākās komponentēs. Šajā bloga ierakstā mēs dziļi ienirsim pielāgoto huku pasaulē, izpētot to priekšrocības, izveidi un lietošanu ar praktiskiem piemēriem.

Kas ir Pielāgotie Huki?

Būtībā pielāgotais huks ir JavaScript funkcija, kas sākas ar vārdu "use" un var izsaukt citus hukus. Tie ļauj jums izvilkt komponentes loģiku atkārtoti izmantojamās funkcijās. Tas ir spēcīgs veids, kā koplietot stāvokli saturošu loģiku, blakusefektus vai citu sarežģītu uzvedību starp komponentēm, neizmantojot render props, augstākas kārtas komponentes (higher-order components) vai citus sarežģītus rakstus.

Pielāgoto Huku Galvenās Iezīmes:

Pielāgoto Huku Izmantošanas Priekšrocības

Pielāgotie huki piedāvā vairākas būtiskas priekšrocības React izstrādē:

Sava Pirmā Pielāgotā Huka Izveide

Ilustrēsim pielāgota huka izveidi ar praktisku piemēru: huks, kas seko līdzi loga izmēram.

Piemērs: useWindowSize

Šis huks atgriezīs pašreizējo pārlūkprogrammas loga platumu un augstumu. Tas arī atjauninās šīs vērtības, kad logs tiks mainīts.

import { useState, useEffect } from 'react';

function useWindowSize() {
  const [windowSize, setWindowSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight,
  });

  useEffect(() => {
    function handleResize() {
      setWindowSize({
        width: window.innerWidth,
        height: window.innerHeight,
      });
    }

    window.addEventListener('resize', handleResize);

    // Noņem notikumu klausītāju tīrīšanas laikā
    return () => window.removeEventListener('resize', handleResize);
  }, []); // Tukšs masīvs nodrošina, ka efekts tiek palaists tikai pie montāžas

  return windowSize;
}

export default useWindowSize;

Paskaidrojums:

  1. Importējiet Nepieciešamos Hukus: Mēs importējam useState un useEffect no React.
  2. Definējiet Huku: Mēs izveidojam funkciju ar nosaukumu useWindowSize, ievērojot nosaukumu veidošanas konvenciju.
  3. Inicializējiet Stāvokli: Mēs izmantojam useState, lai inicializētu windowSize stāvokli ar sākotnējo loga platumu un augstumu.
  4. Iestatiet Notikumu Klausītāju: Mēs izmantojam useEffect, lai pievienotu loga izmēru maiņas notikumu klausītāju. Kad loga izmērs tiek mainīts, handleResize funkcija atjaunina windowSize stāvokli.
  5. Tīrīšana: Mēs atgriežam tīrīšanas funkciju no useEffect, lai noņemtu notikumu klausītāju, kad komponente tiek demontēta. Tas novērš atmiņas noplūdes.
  6. Atgriežamās Vērtības: Huks atgriež windowSize objektu, kas satur pašreizējo loga platumu un augstumu.

Pielāgotā Huka Izmantošana Komponentē

Tagad, kad esam izveidojuši savu pielāgoto huku, apskatīsim, kā to izmantot React komponentē.

import React from 'react';
import useWindowSize from './useWindowSize';

function MyComponent() {
  const { width, height } = useWindowSize();

  return (
    

Loga platums: {width}px

Loga augstums: {height}px

); } export default MyComponent;

Paskaidrojums:

  1. Importējiet Huku: Mēs importējam useWindowSize pielāgoto huku.
  2. Izsauciet Huku: Mēs izsaucam useWindowSize huku komponentes iekšienē.
  3. Piekļūstiet Vērtībām: Mēs destrukturējam atgriezto objektu, lai iegūtu width un height vērtības.
  4. Renderējiet Vērtības: Mēs renderējam platuma un augstuma vērtības komponentes UI.

Jebkura komponente, kas izmanto useWindowSize, automātiski atjaunināsies, mainoties loga izmēram.

Sarežģītāki Piemēri

Izpētīsim dažus sarežģītākus pielāgoto huku lietošanas gadījumus.

Piemērs: useLocalStorage

Šis huks ļauj jums viegli uzglabāt un izgūt datus no local storage.

import { useState, useEffect } from 'react';

function useLocalStorage(key, initialValue) {
  // Stāvoklis mūsu vērtības glabāšanai
  // Nodod sākotnējo vērtību useState, lai loģika tiktu izpildīta tikai vienu reizi
  const [storedValue, setStoredValue] = useState(() => {
    try {
      // Iegūst no local storage pēc atslēgas
      const item = window.localStorage.getItem(key);
      // Parsē saglabāto json vai, ja tāda nav, atgriež initialValue
      return item ? JSON.parse(item) : initialValue;
    } catch (error) {
      // Ja kļūda, arī atgriež initialValue
      console.log(error);
      return initialValue;
    }
  });

  // Atgriež useState iestatīšanas funkcijas ietītu versiju, kas ...
  // ... saglabā jauno vērtību localStorage.
  const setValue = (value) => {
    try {
      // Atļauj vērtībai būt funkcijai, lai mums būtu tāds pats API kā useState
      const valueToStore = value instanceof Function ? value(storedValue) : value;
      // Saglabāt local storage
      window.localStorage.setItem(key, JSON.stringify(valueToStore));
      // Saglabāt stāvokli
      setStoredValue(valueToStore);
    } catch (error) {
      // Sarežģītāka implementācija apstrādātu kļūdas gadījumu
      console.log(error);
    }
  };

  useEffect(() => {
    try {
      const item = window.localStorage.getItem(key);
      setStoredValue(item ? JSON.parse(item) : initialValue);
    } catch (error) {
      console.log(error);
    }
  }, [key, initialValue]);

  return [storedValue, setValue];
}

export default useLocalStorage;

Lietošana:

import React from 'react';
import useLocalStorage from './useLocalStorage';

function MyComponent() {
  const [name, setName] = useLocalStorage('name', 'Viesis');

  return (
    

Sveiki, {name}!

setName(e.target.value)} />
); } export default MyComponent;

Piemērs: useFetch

Šis huks iekapsulē loģiku datu ienesei no API.

import { useState, useEffect } from 'react';

function useFetch(url) {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    async function fetchData() {
      try {
        const response = await fetch(url);
        if (!response.ok) {
          throw new Error(`HTTP kļūda! statuss: ${response.status}`);
        }
        const json = await response.json();
        setData(json);
        setLoading(false);
      } catch (error) {
        setError(error);
        setLoading(false);
      }
    }

    fetchData();
  }, [url]);

  return { data, loading, error };
}

export default useFetch;

Lietošana:

import React from 'react';
import useFetch from './useFetch';

function MyComponent() {
  const { data, loading, error } = useFetch('https://jsonplaceholder.typicode.com/todos/1');

  if (loading) return 

Ielādē...

; if (error) return

Kļūda: {error.message}

; return (

Virsraksts: {data.title}

Pabeigts: {data.completed ? 'Jā' : 'Nē'}

); } export default MyComponent;

Labākās Prakses Pielāgotajiem Hukiem

Lai nodrošinātu, ka jūsu pielāgotie huki ir efektīvi un uzturami, ievērojiet šīs labākās prakses:

Biežākās Kļūdas, no Kurām Izvairīties

Sarežģītāki Raksti

Pielāgoto Huku Komponēšana

Pielāgotos hukus var komponēt kopā, lai radītu sarežģītāku loģiku. Piemēram, jūs varētu apvienot useLocalStorage huku ar useFetch huku, lai automātiski saglabātu ienestos datus local storage.

Loģikas Koplietošana Starp Hukiem

Ja vairākiem pielāgotajiem hukiem ir kopīga loģika, jūs varat izvilkt šo loģiku atsevišķā palīgfunkcijā un atkārtoti izmantot to abos hukos.

Konteksta Izmantošana ar Pielāgotajiem Hukiem

Pielāgotos hukus var izmantot kopā ar React Context, lai piekļūtu globālajam stāvoklim un to atjauninātu. Tas ļauj jums izveidot atkārtoti izmantojamas komponentes, kas ir informētas par lietojumprogrammas globālo stāvokli un var ar to mijiedarboties.

Piemēri no Reālās Pasaules

Šeit ir daži piemēri, kā pielāgotos hukus var izmantot reālās pasaules lietojumprogrammās:

Piemērs: useGeolocation huks starpkultūru lietojumprogrammām, piemēram, kartēšanas vai piegādes pakalpojumiem

import { useState, useEffect } from 'react';

function useGeolocation() {
  const [location, setLocation] = useState({
    latitude: null,
    longitude: null,
    error: null,
  });

  useEffect(() => {
    if (!navigator.geolocation) {
      setLocation({
        latitude: null,
        longitude: null,
        error: 'Šī pārlūkprogramma neatbalsta ģeolokāciju.',
      });
      return;
    }

    const watchId = navigator.geolocation.watchPosition(
      (position) => {
        setLocation({
          latitude: position.coords.latitude,
          longitude: position.coords.longitude,
          error: null,
        });
      },
      (error) => {
        setLocation({
          latitude: null,
          longitude: null,
          error: error.message,
        });
      }
    );

    return () => navigator.geolocation.clearWatch(watchId);
  }, []);

  return location;
}

export default useGeolocation;

Nobeigums

Pielāgotie huki ir spēcīgs rīks tīrāka, atkārtoti izmantojama un vieglāk uzturama React koda rakstīšanai. Iekapsulējot sarežģītu loģiku pielāgotos hukos, jūs varat vienkāršot savas komponentes, samazināt koda dublēšanos un uzlabot savu lietojumprogrammu kopējo struktūru. Pieņemiet pielāgotos hukus un atklājiet to potenciālu, lai veidotu stabilākas un mērogojamākas React lietojumprogrammas.

Sāciet, identificējot vietas savā esošajā koda bāzē, kur loģika tiek atkārtota vairākās komponentēs. Pēc tam pārveidojiet šo loģiku pielāgotos hukos. Laika gaitā jūs izveidosiet atkārtoti izmantojamu huku bibliotēku, kas paātrinās jūsu izstrādes procesu un uzlabos jūsu koda kvalitāti.

Atcerieties ievērot labākās prakses, izvairīties no biežākajām kļūdām un izpētīt sarežģītākus rakstus, lai maksimāli izmantotu pielāgotos hukus. Ar praksi un pieredzi jūs kļūsiet par pielāgoto huku meistaru un efektīvāku React izstrādātāju.