Quali sono le definizioni di tipo per React Hooks in TypeScript?

Dec 15, 2025Lasciate un messaggio

Ehilà! In qualità di fornitore di hook, ultimamente ho ricevuto molte domande sulle definizioni di tipo per React Hooks in TypeScript. Quindi, ho pensato di sedermi e scrivere un post sul blog per condividere ciò che so.

Prima di tutto, parliamo del motivo per cui le definizioni di tipo sono così importanti quando si lavora con React Hooks in TypeScript. TypeScript è un superset digitato di JavaScript che aggiunge la digitazione statica al linguaggio. Ciò significa che è possibile individuare gli errori nelle prime fasi del processo di sviluppo definendo esplicitamente i tipi di variabili, parametri di funzione e valori restituiti. Quando usi React Hooks, che sono una funzionalità relativamente nuova e potente in React, avere definizioni di tipo corrette può rendere il tuo codice più robusto, più facile da capire e meno soggetto a errori.

utilizzareState Hook

Cominciamo con iluseStatehook, che è uno degli hook più comunemente usati in React. ILuseStatehook consente di aggiungere uno stato a un componente funzionale. Ecco come definire i tipi peruseStatein TypeScript:

importa React, { useState } da 'react'; // Definisce il tipo dello stato tipo CounterState = number; const Counter: React.FC = () => { // Utilizza il tipo definito per lo stato const [count, setCount] = useState<CounterState>(0); incremento const = () => { setCount(count + 1); }; return ( <div> <p>Conteggio: {count}</p> <button onClick={increment}>Incrementa</button> </div> ); }; Contatore predefinito per l'esportazione;

In questo esempio definiamo innanzitutto un tipoControStatoche rappresenta il tipo di stato che vogliamo utilizzare. Quindi, quando chiami iluseStatehook, specifichiamo il parametro type<Controstato>. Questo dice a TypeScript che il filecontarela variabile sarà di tiponumero, e ilsetCountla funzione accetterà anumerocome argomento.

useEffect Hook

ILuseEffectil gancio viene utilizzato per eseguire effetti collaterali nei componenti funzionali. Quando si utilizzauseEffectin TypeScript, non è necessario specificare alcuna definizione di tipo per l'hook stesso. Tuttavia, potrebbe essere necessario definire i tipi per le variabili e le funzioni utilizzate all'interno del fileuseEffectrichiamare.

importa React, { useState, useEffect } da 'react'; tipo Dati = { nome: stringa; età: numero; }; const DataFetcher: React.FC = () => { const [data, setData] = useState<Data | nullo>(nulla); useEffect(() => { const fetchData = async () => { const risposta = attendono fetch('https://example.com/api/data'); const risultato: Data = attendono risposta.json(); setData(risultato); }; fetchData(); }, []); if (!data) { return <p>Caricamento in corso...</p>; } return ( <div> <p>Nome: {data.name}</p> <p>Età: {data.age}</p> </div> ); }; esporta DataFetcher predefinito;

In questo esempio definiamo un tipoDatiche rappresenta la forma dei dati che prevediamo di recuperare. Usiamo questo tipo quando definiamo lo statodatiutilizzando iluseStategancio. All'interno deluseEffectcallback, usiamo anche il fileDatitype per specificare il tipo dirisultatovariabile durante l'analisi della risposta JSON.

utilizzareContextHook

ILuseContextl'hook viene utilizzato per accedere al contesto in un componente funzionale. Quando si utilizzauseContextin TypeScript, è necessario definire il tipo del contesto.

importa React, { createContext, useContext } da 'react'; // Definisce il tipo del valore di contesto tipo ThemeContextType = 'light' | 'buio'; // Crea il contesto con il tipo definito const ThemeContext = createContext<ThemeContextType>('light'); const ThemeProvider = ThemeContext.Provider; const ThemeDisplay: React.FC = () => { const tema = useContext(ThemeContext); return <p>Tema corrente: {theme}</p>; }; const App: React.FC = () => { return ( <ThemeProvider value="dark"> <ThemeDisplay /> </ThemeProvider> ); }; esportare l'app predefinita;

In questo esempio definiamo innanzitutto un tipoThemeContextTypeche rappresenta i possibili valori del contesto. Quindi, quando si crea il contesto utilizzandocreateContext, specifichiamo il parametro type<ThemeContextType>. Ciò garantisce che il valore fornito aThemeProvidere il valore a cui si accede utilizzandouseContextsono del tipo corretto.

0153_10154_1

utilizzare il gancio riduttore

ILutilizzareReducerhook è un'alternativa auseStateper la gestione di logiche di stato più complesse. Quando si utilizzautilizzareReducerin TypeScript, è necessario definire i tipi per lo stato, l'azione e la funzione di riduzione.

importa React, { useReducer } da 'react'; // Definisce il tipo dello stato type CounterState = { count: number; }; // Definisce il tipo di azione CounterAction = | { tipo: 'incremento' } | { tipo: 'decremento' }; // Definisce la funzione di riduzione con i tipi const counterReducer = ( state: CounterState, action: CounterAction ): CounterState => { switch (action.type) { case 'increment': return { count: state.count + 1 }; case 'decremento': return { conteggio: stato.count - 1 }; impostazione predefinita: stato restituito; } }; const Contatore: React.FC = () => { const [stato, invio] = useReducer(counterReducer, { count: 0 }); return ( <div> <p>Conteggio: {state.count}</p> <button onClick={() => spedizione({ type: 'increment' })}>Incremento</button> <button onClick={() => spedizione({ type: 'decrement' })}>Decremento</button> </div> ); }; Contatore predefinito per l'esportazione;

In questo esempio definiamo un tipoControStatoche rappresenta la forma dello stato e un tipoControazioneche rappresenta le possibili azioni che possono essere inviate. ILcontatoreRiduttoreLa funzione accetta lo stato corrente e un'azione come argomenti e restituisce un nuovo stato. Definendo questi tipi, ci assicuriamo che ilutilizzareReducerhook e le funzioni che interagiscono con esso utilizzano i tipi corretti.

Hook personalizzati e definizioni di tipo

Quando si creano hook personalizzati in TypeScript, è anche importante definire le definizioni di tipo appropriate. Diciamo che abbiamo un hook personalizzato per gestire gli input del modulo:

importa React, { useState } da 'react'; // Definisce il tipo di input del modulo tipo FormInput = { value: string; errore: stringa | nullo; }; // Definisce l'hook personalizzato con i tipi const useFormInput = (initialValue: string): FormInput => { const [value, setValue] = useState(initialValue); const [errore, setError] = useState<string | nullo>(nulla); const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => { setValue(e.target.value); if (e.target.value.length < 3) { setError('L'input deve contenere almeno 3 caratteri'); } else { setError(null); } }; return {valore, errore}; }; const Forma: React.FC = () => { const { valore, errore } = useFormInput(''); return ( <form> <input type="text" value={value} onChange={handleChange} /> {errore && <p style={{ color: 'red' }}>{error}</p>} <button type="submit">Invia</button> </form> ); }; esporta modulo predefinito;

In questo esempio definiamo un tipoFormInputche rappresenta la forma dei dati restituiti dal custom hook. Il gancio personalizzatoutilizzareFormInputaccetta un valore iniziale come argomento e restituisce un oggetto di tipoFormInput. Ciò garantisce che il componente che utilizza l'hook personalizzato possa gestire correttamente i dati restituiti.

Conclusione

In conclusione, l'utilizzo di definizioni di tipo corrette per React Hooks in TypeScript è essenziale per scrivere codice pulito, gestibile e privo di errori. Sia che tu stia utilizzando ganci incorporati comeuseState,useEffect,useContext,utilizzareReducero creare i tuoi hook personalizzati, prendersi il tempo per definire i tipi corretti può farti risparmiare un sacco di mal di testa a lungo termine.

Come fornitore di ganci, capisco l'importanza di fornire prodotti affidabili e di alta qualità. Offriamo una vasta gamma di ganci per le vostre esigenze di attrezzature per supermercati, inclusiGanci per pannelli foratiEGanci per pareti a doghe. Questi ganci sono progettati per essere durevoli, funzionali e facili da installare, rendendoli un'ottima scelta per qualsiasi supermercato o negozio al dettaglio.

Se sei interessato a saperne di più sui nostri hook o hai domande sulle definizioni di tipo per React Hooks in TypeScript, non esitare a contattarci per una chiacchierata amichevole e una discussione sull'approvvigionamento.

Riferimenti

  • Reagire alla documentazione ufficiale
  • Documentazione ufficiale di TypeScript