"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Ganchos personalizados no React

Ganchos personalizados no React

Publicado em 2024-11-04
Navegar:383

Custom Hooks in React

Ganchos personalizados no React são um recurso poderoso que permite extrair e reutilizar lógica em vários componentes. Eles permitem encapsular lógica complexa com estado, tornando seus componentes mais limpos e fáceis de manter. Aqui está uma rápida visão geral e um exemplo de como criar e usar ganchos personalizados.

Criando um gancho personalizado

Um gancho personalizado é essencialmente uma função JavaScript cujo nome começa com use e que pode chamar outros ganchos dentro dela. Aqui está um exemplo simples de um gancho personalizado que gerencia um contador:

import { useState } from 'react';

// Custom Hook: useCounter
function useCounter(initialValue = 0) {
    const [count, setCount] = useState(initialValue);

    const increment = () => setCount(c => c   1);
    const decrement = () => setCount(c => c - 1);
    const reset = () => setCount(initialValue);

    return { count, increment, decrement, reset };
}

export default useCounter;

Usando o gancho personalizado

Você pode usar o gancho useCounter em qualquer componente funcional:

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

function CounterComponent() {
    const { count, increment, decrement, reset } = useCounter(0);

    return (
        

Count: {count}

); } export default CounterComponent;

Pontos-chave

  1. Convenção de nomenclatura: Sempre inicie o nome do gancho personalizado com use para seguir a convenção do React.
  2. Reutilização: Ganchos personalizados podem ser reutilizados em vários componentes, promovendo o código DRY (Don't Repeat Yourself).
  3. Gerenciamento de estado: você pode gerenciar o estado, executar efeitos colaterais e aproveitar outros ganchos dentro de um gancho personalizado.

Exemplo Avançado: Buscando Dados

Aqui está um gancho personalizado mais avançado para buscar dados:

import { useState, useEffect } from 'react';

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

    useEffect(() => {
        const fetchData = async () => {
            try {
                const response = await fetch(url);
                if (!response.ok) throw new Error('Network response was not ok');
                const result = await response.json();
                setData(result);
            } catch (error) {
                setError(error);
            } finally {
                setLoading(false);
            }
        };

        fetchData();
    }, [url]);

    return { data, loading, error };
}

export default useFetch;

Uso

Você pode usar o gancho useFetch em um componente para buscar dados:

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

function DataFetchingComponent() {
    const { data, loading, error } = useFetch('https://api.example.com/data');

    if (loading) return 

Loading...

; if (error) return

Error: {error.message}

; return (

Data:

{JSON.stringify(data, null, 2)}
); } export default DataFetchingComponent;
); } exportar DataFetchingComponent padrão;

Ganchos personalizados são uma ótima maneira de encapsular lógica e compartilhar funcionalidade entre seus componentes de uma forma limpa e fácil de manter.

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/imyusufakhtar/custom-hooks-in-react-2mk4?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3