Componenti comuni (es. <div>)
Tutti i componenti browser integrati, come <div>, supportano alcune props ed eventi comuni.
- Reference
- Componenti comuni (es.
<div>) - Funzione callback
ref - Oggetto evento React
- Funzione gestore
AnimationEvent - Funzione gestore
ClipboardEvent - Funzione gestore
CompositionEvent - Funzione gestore
DragEvent - Funzione gestore
FocusEvent - Funzione gestore
Event - Funzione gestore
InputEvent - Funzione gestore
KeyboardEvent - Funzione gestore
MouseEvent - Funzione gestore
PointerEvent - Funzione gestore
TouchEvent - Funzione gestore
TransitionEvent - Funzione gestore
UIEvent - Funzione gestore
WheelEvent
- Componenti comuni (es.
- Usage
Reference
Componenti comuni (es. <div>)
<div className="wrapper">Qualche contenuto</div>Props
Queste props React speciali sono supportate per tutti i componenti integrati:
-
children: Un nodo React (un elemento, una stringa, un numero, un portal, un nodo vuoto comenull,undefinede booleani, oppure un array di altri nodi React). Specifica il contenuto all’interno del componente. Quando usi JSX, di solito specifichi la propchildrenimplicitamente annidando tag come<div><span /></div>. -
dangerouslySetInnerHTML: Un oggetto della forma{ __html: '<p>some html</p>' }con una stringa HTML grezza o un valoreTrustedHTMLall’interno. Sostituisce la proprietàinnerHTMLdel nodo DOM e visualizza l’HTML passato al suo interno. Va usato con estrema cautela! Se l’HTML al suo interno non è attendibile (ad esempio, se si basa su dati dell’utente), rischi di introdurre una vulnerabilità XSS. Leggi di più sull’uso didangerouslySetInnerHTML. -
ref: Un oggetto ref dauseRefocreateRef, oppure una funzione callbackref, o una stringa per i ref legacy. Il tuo ref verrà popolato con l’elemento DOM di questo nodo. Leggi di più sulla manipolazione del DOM con i ref. -
suppressContentEditableWarning: Un booleano. Setrue, sopprime l’avviso che React mostra per gli elementi che hanno siachildrensiacontentEditable={true}(che normalmente non funzionano insieme). Usalo se stai costruendo una libreria di input di testo che gestisce manualmente il contenutocontentEditable. -
suppressHydrationWarning: Un booleano. Se usi la renderizzazione lato server, normalmente c’è un avviso quando server e client renderizzano contenuti diversi. In alcuni casi rari (come i timestamp), è molto difficile o impossibile garantire una corrispondenza esatta. Se impostisuppressHydrationWarningsutrue, React non ti avviserà delle discrepanze negli attributi e nel contenuto di quell’elemento. Funziona solo a un livello di profondità ed è pensato come via di fuga. Non abusarne. Leggi come sopprimere gli errori di hydration. -
style: Un oggetto con stili CSS, ad esempio{ fontWeight: 'bold', margin: 20 }. Analogamente alla proprietà DOMstyle, i nomi delle proprietà CSS devono essere scritti incamelCase, ad esempiofontWeightinvece difont-weight. Puoi passare stringhe o numeri come valori. Se passi un numero, comewidth: 100, React aggiungerà automaticamentepx(“pixel”) al valore a meno che non sia una proprietà senza unità. Consigliamo di usarestylesolo per stili dinamici in cui non conosci i valori degli stili in anticipo. In altri casi, applicare classi CSS semplici conclassNameè più efficiente. Leggi di più suclassNameestyle.
Queste props DOM standard sono supportate anche per tutti i componenti integrati:
accessKey: Una stringa. Specifica una scorciatoia da tastiera per l’elemento. Generalmente sconsigliato.aria-*: Gli attributi ARIA ti permettono di specificare le informazioni sull’albero di accessibilità per questo elemento. Vedi attributi ARIA per un riferimento completo. In React, tutti i nomi degli attributi ARIA sono esattamente gli stessi dell’HTML.autoCapitalize: Una stringa. Specifica se e come l’input dell’utente deve essere capitalizzato.className: Una stringa. Specifica il nome della classe CSS dell’elemento. Leggi di più sull’applicazione degli stili CSS.contentEditable: Un booleano. Setrue, il browser permette all’utente di modificare direttamente l’elemento renderizzato. Viene usato per implementare librerie di input di testo ricco come Lexical. React avvisa se provi a passare children React a un elemento concontentEditable={true}perché React non sarà in grado di aggiornare il suo contenuto dopo le modifiche dell’utente.data-*: Gli attributi data ti permettono di allegare dati stringa all’elemento, ad esempiodata-fruit="banana". In React, non sono comunemente usati perché di solito leggeresti i dati dalle props o dallo state.dir:'ltr'o'rtl'. Specifica la direzione del testo dell’elemento.draggable: Un booleano. Specifica se l’elemento è trascinabile. Parte dell’HTML Drag and Drop API.enterKeyHint: Una stringa. Specifica quale azione presentare per il tasto Invio sulle tastiere virtuali.htmlFor: Una stringa. Per<label>e<output>, ti permette di associare l’etichetta a un controllo. Come l’attributo HTMLfor. React usa i nomi delle proprietà DOM standard (htmlFor) invece dei nomi degli attributi HTML.hidden: Un booleano o una stringa. Specifica se l’elemento deve essere nascosto.id: Una stringa. Specifica un identificatore univoco per questo elemento, che può essere usato per trovarlo in seguito o collegarlo ad altri elementi. Generalo conuseIdper evitare conflitti tra più istanze dello stesso componente.is: Una stringa. Se specificato, il componente si comporterà come un elemento personalizzato.inputMode: Una stringa. Specifica quale tipo di tastiera visualizzare (ad esempio, testo, numero o telefono).itemProp: Una stringa. Specifica quale proprietà l’elemento rappresenta per i crawler di dati strutturati.lang: Una stringa. Specifica la lingua dell’elemento.onAnimationEnd: Una funzione gestore diAnimationEvent. Scatta quando un’animazione CSS termina.onAnimationEndCapture: Una versione dionAnimationEndche scatta nella fase di capture.onAnimationIteration: Una funzione gestore diAnimationEvent. Scatta quando termina un’iterazione di un’animazione CSS e ne inizia un’altra.onAnimationIterationCapture: Una versione dionAnimationIterationche scatta nella fase di capture.onAnimationStart: Una funzione gestore diAnimationEvent. Scatta quando inizia un’animazione CSS.onAnimationStartCapture:onAnimationStart, ma scatta nella fase di capture.onAuxClick: Una funzione gestore diMouseEvent. Scatta quando viene cliccato un pulsante del pointer non primario.onAuxClickCapture: Una versione dionAuxClickche scatta nella fase di capture.onBeforeInput: Una funzione gestore diInputEvent. Scatta prima che il valore di un elemento modificabile venga modificato. React non usa ancora l’evento nativobeforeinpute tenta invece di polyfillarlo usando altri eventi.onBeforeInputCapture: Una versione dionBeforeInputche scatta nella fase di capture.onBlur: Una funzione gestore diFocusEvent. Scatta quando un elemento perde il focus. A differenza dell’eventoblurintegrato del browser, in React l’eventoonBlurpropaga.onBlurCapture: Una versione dionBlurche scatta nella fase di capture.onClick: Una funzione gestore diMouseEvent. Scatta quando il pulsante primario viene cliccato sul dispositivo di puntamento.onClickCapture: Una versione dionClickche scatta nella fase di capture.onCompositionStart: Una funzione gestore diCompositionEvent. Scatta quando un editor di metodo di input avvia una nuova sessione di composizione.onCompositionStartCapture: Una versione dionCompositionStartche scatta nella fase di capture.onCompositionEnd: Una funzione gestore diCompositionEvent. Scatta quando un editor di metodo di input completa o annulla una sessione di composizione.onCompositionEndCapture: Una versione dionCompositionEndche scatta nella fase di capture.onCompositionUpdate: Una funzione gestore diCompositionEvent. Scatta quando un editor di metodo di input riceve un nuovo carattere.onCompositionUpdateCapture: Una versione dionCompositionUpdateche scatta nella fase di capture.onContextMenu: Una funzione gestore diMouseEvent. Scatta quando l’utente prova ad aprire un menu contestuale.onContextMenuCapture: Una versione dionContextMenuche scatta nella fase di capture.onCopy: Una funzione gestore diClipboardEvent. Scatta quando l’utente prova a copiare qualcosa negli appunti.onCopyCapture: Una versione dionCopyche scatta nella fase di capture.onCut: Una funzione gestore diClipboardEvent. Scatta quando l’utente prova a tagliare qualcosa negli appunti.onCutCapture: Una versione dionCutche scatta nella fase di capture.onDoubleClick: Una funzione gestore diMouseEvent. Scatta quando l’utente clicca due volte. Corrisponde all’eventodblclickdel browser.onDoubleClickCapture: Una versione dionDoubleClickche scatta nella fase di capture.onDrag: Una funzione gestore diDragEvent. Scatta mentre l’utente sta trascinando qualcosa.onDragCapture: Una versione dionDragche scatta nella fase di capture.onDragEnd: Una funzione gestore diDragEvent. Scatta quando l’utente smette di trascinare qualcosa.onDragEndCapture: Una versione dionDragEndche scatta nella fase di capture.onDragEnter: Una funzione gestore diDragEvent. Scatta quando il contenuto trascinato entra in un target di drop valido.onDragEnterCapture: Una versione dionDragEnterche scatta nella fase di capture.onDragOver: Una funzione gestore diDragEvent. Scatta su un target di drop valido mentre il contenuto trascinato viene trascinato sopra di esso. Devi chiamaree.preventDefault()qui per consentire il drop.onDragOverCapture: Una versione dionDragOverche scatta nella fase di capture.onDragStart: Una funzione gestore diDragEvent. Scatta quando l’utente inizia a trascinare un elemento.onDragStartCapture: Una versione dionDragStartche scatta nella fase di capture.onDrop: Una funzione gestore diDragEvent. Scatta quando qualcosa viene rilasciato su un target di drop valido.onDropCapture: Una versione dionDropche scatta nella fase di capture.onFocus: Una funzione gestore diFocusEvent. Scatta quando un elemento riceve il focus. A differenza dell’eventofocusintegrato del browser, in React l’eventoonFocuspropaga.onFocusCapture: Una versione dionFocusche scatta nella fase di capture.onGotPointerCapture: Una funzione gestore diPointerEvent. Scatta quando un elemento cattura programmaticamente un pointer.onGotPointerCaptureCapture: Una versione dionGotPointerCaptureche scatta nella fase di capture.onKeyDown: Una funzione gestore diKeyboardEvent. Scatta quando un tasto viene premuto.onKeyDownCapture: Una versione dionKeyDownche scatta nella fase di capture.onKeyPress: Una funzione gestore diKeyboardEvent. Deprecato. UsaonKeyDownoonBeforeInputal suo posto.onKeyPressCapture: Una versione dionKeyPressche scatta nella fase di capture.onKeyUp: Una funzione gestore diKeyboardEvent. Scatta quando un tasto viene rilasciato.onKeyUpCapture: Una versione dionKeyUpche scatta nella fase di capture.onLostPointerCapture: Una funzione gestore diPointerEvent. Scatta quando un elemento smette di catturare un pointer.onLostPointerCaptureCapture: Una versione dionLostPointerCaptureche scatta nella fase di capture.onMouseDown: Una funzione gestore diMouseEvent. Scatta quando il puntatore viene premuto.onMouseDownCapture: Una versione dionMouseDownche scatta nella fase di capture.onMouseEnter: Una funzione gestore diMouseEvent. Scatta quando il puntatore si sposta all’interno di un elemento. Non ha una fase di capture. Invece,onMouseLeaveeonMouseEntersi propagano dall’elemento che viene lasciato a quello che viene raggiunto.onMouseLeave: Una funzione gestore diMouseEvent. Scatta quando il puntatore si sposta fuori da un elemento. Non ha una fase di capture. Invece,onMouseLeaveeonMouseEntersi propagano dall’elemento che viene lasciato a quello che viene raggiunto.onMouseMove: Una funzione gestore diMouseEvent. Scatta quando il puntatore cambia coordinate.onMouseMoveCapture: Una versione dionMouseMoveche scatta nella fase di capture.onMouseOut: Una funzione gestore diMouseEvent. Scatta quando il puntatore si sposta fuori da un elemento, o se si sposta in un elemento figlio.onMouseOutCapture: Una versione dionMouseOutche scatta nella fase di capture.onMouseUp: Una funzione gestore diMouseEvent. Scatta quando il puntatore viene rilasciato.onMouseUpCapture: Una versione dionMouseUpche scatta nella fase di capture.onPointerCancel: Una funzione gestore diPointerEvent. Scatta quando il browser annulla un’interazione del pointer.onPointerCancelCapture: Una versione dionPointerCancelche scatta nella fase di capture.onPointerDown: Una funzione gestore diPointerEvent. Scatta quando un pointer diventa attivo.onPointerDownCapture: Una versione dionPointerDownche scatta nella fase di capture.onPointerEnter: Una funzione gestore diPointerEvent. Scatta quando un pointer si sposta all’interno di un elemento. Non ha una fase di capture. Invece,onPointerLeaveeonPointerEntersi propagano dall’elemento che viene lasciato a quello che viene raggiunto.onPointerLeave: Una funzione gestore diPointerEvent. Scatta quando un pointer si sposta fuori da un elemento. Non ha una fase di capture. Invece,onPointerLeaveeonPointerEntersi propagano dall’elemento che viene lasciato a quello che viene raggiunto.onPointerMove: Una funzione gestore diPointerEvent. Scatta quando un pointer cambia coordinate.onPointerMoveCapture: Una versione dionPointerMoveche scatta nella fase di capture.onPointerOut: Una funzione gestore diPointerEvent. Scatta quando un pointer si sposta fuori da un elemento, se l’interazione del pointer viene annullata, e per altri motivi.onPointerOutCapture: Una versione dionPointerOutche scatta nella fase di capture.onPointerUp: Una funzione gestore diPointerEvent. Scatta quando un pointer non è più attivo.onPointerUpCapture: Una versione dionPointerUpche scatta nella fase di capture.onPaste: Una funzione gestore diClipboardEvent. Scatta quando l’utente prova a incollare qualcosa dagli appunti.onPasteCapture: Una versione dionPasteche scatta nella fase di capture.onScroll: Una funzione gestore diEvent. Scatta quando un elemento è stato scrollato. Questo evento non propaga.onScrollCapture: Una versione dionScrollche scatta nella fase di capture.onSelect: Una funzione gestore diEvent. Scatta dopo che la selezione all’interno di un elemento modificabile come un input cambia. React estende l’eventoonSelectper funzionare anche con elementicontentEditable={true}. Inoltre, React lo estende per scattare con selezione vuota e durante le modifiche (che possono influenzare la selezione).onSelectCapture: Una versione dionSelectche scatta nella fase di capture.onTouchCancel: Una funzione gestore diTouchEvent. Scatta quando il browser annulla un’interazione touch.onTouchCancelCapture: Una versione dionTouchCancelche scatta nella fase di capture.onTouchEnd: Una funzione gestore diTouchEvent. Scatta quando uno o più punti touch vengono rimossi.onTouchEndCapture: Una versione dionTouchEndche scatta nella fase di capture.onTouchMove: Una funzione gestore diTouchEvent. Scatta quando uno o più punti touch vengono spostati.onTouchMoveCapture: Una versione dionTouchMoveche scatta nella fase di capture.onTouchStart: Una funzione gestore diTouchEvent. Scatta quando uno o più punti touch vengono posizionati.onTouchStartCapture: Una versione dionTouchStartche scatta nella fase di capture.onTransitionEnd: Una funzione gestore diTransitionEvent. Scatta quando una transizione CSS termina.onTransitionEndCapture: Una versione dionTransitionEndche scatta nella fase di capture.onWheel: Una funzione gestore diWheelEvent. Scatta quando l’utente ruota una rotella.onWheelCapture: Una versione dionWheelche scatta nella fase di capture.role: Una stringa. Specifica esplicitamente il ruolo dell’elemento per le tecnologie assistive.slot: Una stringa. Specifica il nome dello slot quando usi lo shadow DOM. In React, un pattern equivalente si ottiene tipicamente passando JSX come props, ad esempio<Layout left={<Sidebar />} right={<Content />} />.spellCheck: Un booleano o null. Se impostato esplicitamente sutrueofalse, abilita o disabilita il controllo ortografico.tabIndex: Un numero. Sostituisce il comportamento predefinito del tasto Tab. Evita di usare valori diversi da-1e0.title: Una stringa. Specifica il testo del tooltip per l’elemento.translate:'yes'o'no'. Passare'no'esclude il contenuto dell’elemento dalla traduzione.
Puoi anche passare attributi personalizzati come props, ad esempio mycustomprop="someValue". Può essere utile quando integri librerie di terze parti. Il nome dell’attributo personalizzato deve essere minuscolo e non deve iniziare con on. Il valore verrà convertito in stringa. Se passi null o undefined, l’attributo personalizzato verrà rimosso.
Questi eventi scattano solo per gli elementi <form>:
onReset: Una funzione gestore diEvent. Scatta quando un form viene resettato.onResetCapture: Una versione dionResetche scatta nella fase di capture.onSubmit: Una funzione gestore diEvent. Scatta quando un form viene inviato.onSubmitCapture: Una versione dionSubmitche scatta nella fase di capture.
Questi eventi scattano solo per gli elementi <dialog>. A differenza degli eventi del browser, in React propagano:
onCancel: Una funzione gestore diEvent. Scatta quando l’utente prova a chiudere il dialog.onCancelCapture: Una versione dionCancelche scatta nella fase di capture.onClose: Una funzione gestore diEvent. Scatta quando un dialog è stato chiuso.onCloseCapture: Una versione dionCloseche scatta nella fase di capture.
Questi eventi scattano solo per gli elementi <details>. A differenza degli eventi del browser, in React propagano:
onToggle: Una funzione gestore diEvent. Scatta quando l’utente attiva/disattiva i details.onToggleCapture: Una versione dionToggleche scatta nella fase di capture.
Questi eventi scattano per elementi <img>, <iframe>, <object>, <embed>, <link> e SVG <image>. A differenza degli eventi del browser, in React propagano:
onLoad: Una funzione gestore diEvent. Scatta quando la risorsa è stata caricata.onLoadCapture: Una versione dionLoadche scatta nella fase di capture.onError: Una funzione gestore diEvent. Scatta quando la risorsa non ha potuto essere caricata.onErrorCapture: Una versione dionErrorche scatta nella fase di capture.
Questi eventi scattano per risorse come <audio> e <video>. A differenza degli eventi del browser, in React propagano:
onAbort: Una funzione gestore diEvent. Scatta quando la risorsa non è stata completamente caricata, ma non a causa di un errore.onAbortCapture: Una versione dionAbortche scatta nella fase di capture.onCanPlay: Una funzione gestore diEvent. Scatta quando ci sono abbastanza dati per iniziare la riproduzione, ma non abbastanza per riprodurre fino alla fine senza buffering.onCanPlayCapture: Una versione dionCanPlayche scatta nella fase di capture.onCanPlayThrough: Una funzione gestore diEvent. Scatta quando ci sono abbastanza dati per far risultare probabile l’avvio della riproduzione senza buffering fino alla fine.onCanPlayThroughCapture: Una versione dionCanPlayThroughche scatta nella fase di capture.onDurationChange: Una funzione gestore diEvent. Scatta quando la durata del media è stata aggiornata.onDurationChangeCapture: Una versione dionDurationChangeche scatta nella fase di capture.onEmptied: Una funzione gestore diEvent. Scatta quando il media è diventato vuoto.onEmptiedCapture: Una versione dionEmptiedche scatta nella fase di capture.onEncrypted: Una funzione gestore diEvent. Scatta quando il browser incontra media crittografati.onEncryptedCapture: Una versione dionEncryptedche scatta nella fase di capture.onEnded: Una funzione gestore diEvent. Scatta quando la riproduzione si ferma perché non c’è più nulla da riprodurre.onEndedCapture: Una versione dionEndedche scatta nella fase di capture.onError: Una funzione gestore diEvent. Scatta quando la risorsa non ha potuto essere caricata.onErrorCapture: Una versione dionErrorche scatta nella fase di capture.onLoadedData: Una funzione gestore diEvent. Scatta quando il frame di riproduzione corrente è stato caricato.onLoadedDataCapture: Una versione dionLoadedDatache scatta nella fase di capture.onLoadedMetadata: Una funzione gestore diEvent. Scatta quando i metadati sono stati caricati.onLoadedMetadataCapture: Una versione dionLoadedMetadatache scatta nella fase di capture.onLoadStart: Una funzione gestore diEvent. Scatta quando il browser ha iniziato a caricare la risorsa.onLoadStartCapture: Una versione dionLoadStartche scatta nella fase di capture.onPause: Una funzione gestore diEvent. Scatta quando il media è stato messo in pausa.onPauseCapture: Una versione dionPauseche scatta nella fase di capture.onPlay: Una funzione gestore diEvent. Scatta quando il media non è più in pausa.onPlayCapture: Una versione dionPlayche scatta nella fase di capture.onPlaying: Una funzione gestore diEvent. Scatta quando il media inizia o riprende la riproduzione.onPlayingCapture: Una versione dionPlayingche scatta nella fase di capture.onProgress: Una funzione gestore diEvent. Scatta periodicamente mentre la risorsa è in caricamento.onProgressCapture: Una versione dionProgressche scatta nella fase di capture.onRateChange: Una funzione gestore diEvent. Scatta quando la velocità di riproduzione cambia.onRateChangeCapture: Una versione dionRateChangeche scatta nella fase di capture.onResize: Una funzione gestore diEvent. Scatta quando le dimensioni del video cambiano.onResizeCapture: Una versione dionResizeche scatta nella fase di capture.onSeeked: Una funzione gestore diEvent. Scatta quando un’operazione di seek termina.onSeekedCapture: Una versione dionSeekedche scatta nella fase di capture.onSeeking: Una funzione gestore diEvent. Scatta quando inizia un’operazione di seek.onSeekingCapture: Una versione dionSeekingche scatta nella fase di capture.onStalled: Una funzione gestore diEvent. Scatta quando il browser attende dati ma questi continuano a non caricarsi.onStalledCapture: Una versione dionStalledche scatta nella fase di capture.onSuspend: Una funzione gestore diEvent. Scatta quando il caricamento della risorsa è stato sospeso.onSuspendCapture: Una versione dionSuspendche scatta nella fase di capture.onTimeUpdate: Una funzione gestore diEvent. Scatta quando il tempo di riproduzione corrente viene aggiornato.onTimeUpdateCapture: Una versione dionTimeUpdateche scatta nella fase di capture.onVolumeChange: Una funzione gestore diEvent. Scatta quando il volume è cambiato.onVolumeChangeCapture: Una versione dionVolumeChangeche scatta nella fase di capture.onWaiting: Una funzione gestore diEvent. Scatta quando la riproduzione si è fermata per mancanza temporanea di dati.onWaitingCapture: Una versione dionWaitingche scatta nella fase di capture.
Caveats
- Non puoi passare contemporaneamente sia
childrensiadangerouslySetInnerHTML. - Alcuni eventi (come
onAborteonLoad) non propagano nel browser, ma propagano in React.
Funzione callback ref
Invece di un oggetto ref (come quello restituito da useRef), puoi passare una funzione all’attributo ref.
<div ref={(node) => {
console.log('Attached', node);
return () => {
console.log('Clean up', node)
}
}}>Vedi un esempio di utilizzo della callback ref.
Quando il nodo DOM <div> viene aggiunto allo schermo, React chiamerà la tua callback ref con il node DOM come argomento. Quando quel nodo DOM <div> viene rimosso, React chiamerà la funzione di cleanup restituita dalla callback.
React chiamerà anche la tua callback ref ogni volta che passi una callback ref diversa. Nell’esempio sopra, (node) => { ... } è una funzione diversa a ogni renderizzazione. Quando il tuo componente viene ri-renderizzato, la funzione precedente verrà chiamata con null come argomento, e la funzione successiva verrà chiamata con il nodo DOM.
Parameters
node: Un nodo DOM. React ti passerà il nodo DOM quando il ref viene collegato. A meno che tu non passi lo stesso riferimento di funzione per la callbackrefa ogni renderizzazione, la callback verrà temporaneamente pulita e ricreata a ogni ri-renderizzazione del componente.
Returns
- opzionale
cleanup function: Quando ilrefviene scollegato, React chiamerà la funzione di cleanup. Se una funzione non viene restituita dalla callbackref, React chiamerà di nuovo la callback connullcome argomento quando ilrefviene scollegato. Questo comportamento verrà rimosso in una versione futura.
Caveats
- Quando Strict Mode è attivo, React eseguirà un ciclo aggiuntivo setup+cleanup solo in sviluppo prima del primo setup reale. È un stress test che assicura che la tua logica di cleanup “specchi” la logica di setup e che fermi o annulli ciò che il setup sta facendo. Se questo causa un problema, implementa la funzione di cleanup.
- Quando passi una callback
refdiversa, React chiamerà la funzione di cleanup della callback precedente se fornita. Se nessuna funzione di cleanup è definita, la callbackrefverrà chiamata connullcome argomento. La funzione successiva verrà chiamata con il nodo DOM.
Oggetto evento React
I tuoi gestori di eventi riceveranno un oggetto evento React. È anche talvolta noto come “evento sintetico”.
<button onClick={e => {
console.log(e); // React event object
}} />Rispetta lo stesso standard degli eventi DOM sottostanti, ma corregge alcune inconsistenze del browser.
Alcuni eventi React non corrispondono direttamente agli eventi nativi del browser. Ad esempio in onMouseLeave, e.nativeEvent punterà a un evento mouseout. La mappatura specifica non fa parte dell’API pubblica e potrebbe cambiare in futuro. Se hai bisogno dell’evento browser sottostante per qualche motivo, leggilo da e.nativeEvent.
Proprietà
Gli oggetti evento React implementano alcune delle proprietà standard Event:
bubbles: Un booleano. Restituisce se l’evento propaga attraverso il DOM.cancelable: Un booleano. Restituisce se l’evento può essere annullato.currentTarget: Un nodo DOM. Restituisce il nodo a cui il gestore corrente è collegato nell’albero React.defaultPrevented: Un booleano. Restituisce sepreventDefaultè stato chiamato.eventPhase: Un numero. Restituisce in quale fase si trova attualmente l’evento.isTrusted: Un booleano. Restituisce se l’evento è stato avviato dall’utente.target: Un nodo DOM. Restituisce il nodo su cui l’evento si è verificato (che potrebbe essere un discendente distante).timeStamp: Un numero. Restituisce l’ora in cui l’evento si è verificato.
Inoltre, gli oggetti evento React forniscono queste proprietà:
nativeEvent: UnEventDOM. L’oggetto evento originale del browser.
Metodi
Gli oggetti evento React implementano alcuni dei metodi standard Event:
preventDefault(): Impedisce l’azione predefinita del browser per l’evento.stopPropagation(): Interrompe la propagazione dell’evento attraverso l’albero React.
Inoltre, gli oggetti evento React forniscono questi metodi:
isDefaultPrevented(): Restituisce un boolean value indicating whetherpreventDefaultwas called.isPropagationStopped(): Restituisce un boolean value indicating whetherstopPropagationwas called.persist(): Non usato con React DOM. Con React Native, chiamalo per leggere le proprietà dell’evento dopo l’evento.isPersistent(): Non usato con React DOM. Con React Native, restituisce sepersistè stato chiamato.
Caveats
- I valori di
currentTarget,eventPhase,targetetyperiflettono i valori che il tuo codice React si aspetta. Sotto il cofano, React collega i gestori di eventi alla radice, ma questo non si riflette negli oggetti evento React. Ad esempio,e.currentTargetpotrebbe non essere lo stesso die.nativeEvent.currentTargetsottostante. Per eventi polyfillati,e.type(tipo evento React) potrebbe differire dae.nativeEvent.type(tipo sottostante).
Funzione gestore AnimationEvent
Un tipo di gestore di eventi per gli eventi di animazione CSS.
<div
onAnimationStart={e => console.log('onAnimationStart')}
onAnimationIteration={e => console.log('onAnimationIteration')}
onAnimationEnd={e => console.log('onAnimationEnd')}
/>Parameters
e: Un oggetto evento React con queste proprietà aggiuntiveAnimationEvent:
Funzione gestore ClipboardEvent
Un tipo di gestore di eventi per gli eventi della Clipboard API.
<input
onCopy={e => console.log('onCopy')}
onCut={e => console.log('onCut')}
onPaste={e => console.log('onPaste')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveClipboardEvent:
Funzione gestore CompositionEvent
Un tipo di gestore di eventi per gli eventi dell’editor di metodo di input (IME).
<input
onCompositionStart={e => console.log('onCompositionStart')}
onCompositionUpdate={e => console.log('onCompositionUpdate')}
onCompositionEnd={e => console.log('onCompositionEnd')}
/>Parameters
e: Un oggetto evento React con queste proprietà aggiuntiveCompositionEvent:
Funzione gestore DragEvent
Un tipo di gestore di eventi per gli eventi dell’HTML Drag and Drop API.
<>
<div
draggable={true}
onDragStart={e => console.log('onDragStart')}
onDragEnd={e => console.log('onDragEnd')}
>
Sorgente drag
</div>
<div
onDragEnter={e => console.log('onDragEnter')}
onDragLeave={e => console.log('onDragLeave')}
onDragOver={e => { e.preventDefault(); console.log('onDragOver'); }}
onDrop={e => console.log('onDrop')}
>
Target di drop
</div>
</>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveDragEvent:Include anche le proprietà
MouseEventereditate:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
Include anche le proprietà
UIEventereditate:
Funzione gestore FocusEvent
Un tipo di gestore di eventi per gli eventi di focus.
<input
onFocus={e => console.log('onFocus')}
onBlur={e => console.log('onBlur')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveFocusEvent:Include anche le proprietà
UIEventereditate:
Funzione gestore Event
Un tipo di gestore di eventi per eventi generici.
Parameters
e: Un oggetto evento React senza proprietà aggiuntive.
Funzione gestore InputEvent
Un tipo di gestore di eventi per l’evento onBeforeInput.
<input onBeforeInput={e => console.log('onBeforeInput')} />Parameters
e: Un oggetto evento React con queste proprietà aggiuntiveInputEvent:
Funzione gestore KeyboardEvent
Un tipo di gestore di eventi per gli eventi da tastiera.
<input
onKeyDown={e => console.log('onKeyDown')}
onKeyUp={e => console.log('onKeyUp')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveKeyboardEvent:altKeycharCodecodectrlKeygetModifierState(key)keykeyCodelocalemetaKeylocationrepeatshiftKeywhich
Include anche le proprietà
UIEventereditate:
Funzione gestore MouseEvent
Un tipo di gestore di eventi per gli eventi del mouse.
<div
onClick={e => console.log('onClick')}
onMouseEnter={e => console.log('onMouseEnter')}
onMouseOver={e => console.log('onMouseOver')}
onMouseDown={e => console.log('onMouseDown')}
onMouseUp={e => console.log('onMouseUp')}
onMouseLeave={e => console.log('onMouseLeave')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveMouseEvent:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
Include anche le proprietà
UIEventereditate:
Funzione gestore PointerEvent
Un tipo di gestore di eventi per gli eventi pointer.
<div
onPointerEnter={e => console.log('onPointerEnter')}
onPointerMove={e => console.log('onPointerMove')}
onPointerDown={e => console.log('onPointerDown')}
onPointerUp={e => console.log('onPointerUp')}
onPointerLeave={e => console.log('onPointerLeave')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntivePointerEvent:Include anche le proprietà
MouseEventereditate:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
Include anche le proprietà
UIEventereditate:
Funzione gestore TouchEvent
Un tipo di gestore di eventi per gli eventi touch.
<div
onTouchStart={e => console.log('onTouchStart')}
onTouchMove={e => console.log('onTouchMove')}
onTouchEnd={e => console.log('onTouchEnd')}
onTouchCancel={e => console.log('onTouchCancel')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveTouchEvent:Include anche le proprietà
UIEventereditate:
Funzione gestore TransitionEvent
Un tipo di gestore di eventi per gli eventi di transizione CSS.
<div
onTransitionEnd={e => console.log('onTransitionEnd')}
/>Parameters
e: Un oggetto evento React con queste proprietà aggiuntiveTransitionEvent:
Funzione gestore UIEvent
Un tipo di gestore di eventi per eventi UI generici.
<div
onScroll={e => console.log('onScroll')}
/>Parameters
e: Un oggetto evento React con queste proprietà aggiuntiveUIEvent:
Funzione gestore WheelEvent
Un tipo di gestore di eventi per l’evento onWheel.
<div
onWheel={e => console.log('onWheel')}
/>Parameters
-
e: Un oggetto evento React con queste proprietà aggiuntiveWheelEvent:Include anche le proprietà
MouseEventereditate:altKeybuttonbuttonsctrlKeyclientXclientYgetModifierState(key)metaKeymovementXmovementYpageXpageYrelatedTargetscreenXscreenYshiftKey
Include anche le proprietà
UIEventereditate:
Usage
Applicare stili CSS
In React, specifichi una classe CSS con className. Funziona come l’attributo class in HTML:
<img className="avatar" />Poi scrivi le regole CSS in un file CSS separato:
/* Nel tuo CSS */
.avatar {
border-radius: 50%;
}React non prescrive come aggiungere file CSS. Nel caso più semplice, aggiungerai un tag <link> al tuo HTML. Se usi un build tool o un framework, consulta la sua documentazione per sapere come aggiungere un file CSS al tuo progetto.
A volte, i valori degli stili dipendono dai dati. Usa l’attributo style per passare alcuni stili dinamicamente:
<img
className="avatar"
style={{
width: user.imageSize,
height: user.imageSize
}}
/>Nell’esempio sopra, style={{}} non è una sintassi speciale, ma un normale oggetto {} all’interno delle parentesi graffe JSX di style={ }. Consigliamo di usare l’attributo style solo quando i tuoi stili dipendono da variabili JavaScript.
export default function Avatar({ user }) { return ( <img src={user.imageUrl} alt={'Photo of ' + user.name} className="avatar" style={{ width: user.imageSize, height: user.imageSize }} /> ); }
Approfondimento
Per applicare classi CSS condizionalmente, devi produrre la stringa className tu stesso usando JavaScript.
Ad esempio, className={'row ' + (isSelected ? 'selected': '')} produrrà className="row" o className="row selected" a seconda che isSelected sia true.
Per renderlo più leggibile, puoi usare una piccola libreria helper come classnames:
import cn from 'classnames';
function Row({ isSelected }) {
return (
<div className={cn('row', isSelected && 'selected')}>
...
</div>
);
}È particolarmente comodo se hai più classi condizionali:
import cn from 'classnames';
function Row({ isSelected, size }) {
return (
<div className={cn('row', {
selected: isSelected,
large: size === 'large',
small: size === 'small',
})}>
...
</div>
);
}Manipolare un nodo DOM con un ref
A volte, avrai bisogno di ottenere il nodo DOM del browser associato a un tag in JSX. Ad esempio, se vuoi mettere a fuoco un <input> quando viene cliccato un bottone, devi chiamare focus() sul nodo DOM <input> del browser.
Per ottenere il nodo DOM del browser per un tag, dichiara un ref e passalo come attributo ref a quel tag:
import { useRef } from 'react';
export default function Form() {
const inputRef = useRef(null);
// ...
return (
<input ref={inputRef} />
// ...React inserirà il nodo DOM in inputRef.current dopo che è stato renderizzato sullo schermo.
import { useRef } from 'react'; export default function Form() { const inputRef = useRef(null); function handleClick() { inputRef.current.focus(); } return ( <> <input ref={inputRef} /> <button onClick={handleClick}> Metti a fuoco l'input </button> </> ); }
Leggi di più sulla manipolazione del DOM con i ref e consulta altri esempi.
Per casi d’uso più avanzati, l’attributo ref accetta anche una funzione callback.
Impostare pericolosamente l’inner HTML
Puoi passare una stringa HTML grezza o un valore TrustedHTML a un elemento così:
const markup = { __html: '<p>some raw html</p>' };
return <div dangerouslySetInnerHTML={markup} />;Questo è pericoloso. Come con la proprietà DOM innerHTML sottostante, devi usare estrema cautela! A meno che il markup non provenga da una fonte completamente attendibile, è banale introdurre una vulnerabilità XSS in questo modo.
Se il tuo sito applica Trusted Types, passa un valore TrustedHTML creato dalla tua policy di sicurezza come __html. React passa il valore al browser senza convertirlo in stringa, permettendo al browser di validarlo. La tua policy deve comunque assicurare che qualsiasi input usato per creare il valore sia attendibile e sanitizzato.
Ad esempio, se usi una libreria Markdown che converte Markdown in HTML, ti fidi che il suo parser non contenga bug, e l’utente vede solo il proprio input, puoi visualizzare l’HTML risultante così:
import { Remarkable } from 'remarkable'; const md = new Remarkable(); function renderMarkdownToHTML(markdown) { // Questo è sicuro SOLO perché l'HTML in output // viene mostrato allo stesso utente, e perché ti // fidi che questo parser Markdown non abbia bug. const renderedHTML = md.render(markdown); return {__html: renderedHTML}; } export default function MarkdownPreview({ markdown }) { const markup = renderMarkdownToHTML(markdown); return <div dangerouslySetInnerHTML={markup} />; }
L’oggetto {__html} dovrebbe essere creato il più vicino possibile al punto in cui l’HTML viene generato, come fa l’esempio sopra nella funzione renderMarkdownToHTML. Questo assicura che tutto l’HTML grezzo usato nel tuo codice sia esplicitamente contrassegnato come tale, e che solo le variabili che ti aspetti contengano HTML vengano passate a dangerouslySetInnerHTML. Non è consigliato creare l’oggetto inline come <div dangerouslySetInnerHTML={{__html: markup}} />.
Per capire perché renderizzare HTML arbitrario è pericoloso, sostituisci il codice sopra con questo:
const post = {
// Immagina che questo contenuto sia salvato nel database.
content: `<img src="" onerror='alert("you were hacked")'>`
};
export default function MarkdownPreview() {
// 🔴 BUCO DI SICUREZZA: passare input non attendibile a dangerouslySetInnerHTML
const markup = { __html: post.content };
return <div dangerouslySetInnerHTML={markup} />;
}Il codice incorporato nell’HTML verrà eseguito. Un hacker potrebbe usare questo buco di sicurezza per rubare informazioni dell’utente o eseguire azioni per conto suo. Usa dangerouslySetInnerHTML solo con dati attendibili e sanitizzati.
Gestire eventi del mouse
Questo esempio mostra alcuni comuni eventi del mouse e quando scattano.
export default function MouseExample() { return ( <div onMouseEnter={e => console.log('onMouseEnter (parent)')} onMouseLeave={e => console.log('onMouseLeave (parent)')} > <button onClick={e => console.log('onClick (first button)')} onMouseDown={e => console.log('onMouseDown (first button)')} onMouseEnter={e => console.log('onMouseEnter (first button)')} onMouseLeave={e => console.log('onMouseLeave (first button)')} onMouseOver={e => console.log('onMouseOver (first button)')} onMouseUp={e => console.log('onMouseUp (first button)')} > Primo bottone </button> <button onClick={e => console.log('onClick (second button)')} onMouseDown={e => console.log('onMouseDown (second button)')} onMouseEnter={e => console.log('onMouseEnter (second button)')} onMouseLeave={e => console.log('onMouseLeave (second button)')} onMouseOver={e => console.log('onMouseOver (second button)')} onMouseUp={e => console.log('onMouseUp (second button)')} > Secondo bottone </button> </div> ); }
export default function PointerExample() { return ( <div onPointerEnter={e => console.log('onPointerEnter (parent)')} onPointerLeave={e => console.log('onPointerLeave (parent)')} style={{ padding: 20, backgroundColor: '#ddd' }} > <div onPointerDown={e => console.log('onPointerDown (first child)')} onPointerEnter={e => console.log('onPointerEnter (first child)')} onPointerLeave={e => console.log('onPointerLeave (first child)')} onPointerMove={e => console.log('onPointerMove (first child)')} onPointerUp={e => console.log('onPointerUp (first child)')} style={{ padding: 20, backgroundColor: 'lightyellow' }} > Primo figlio </div> <div onPointerDown={e => console.log('onPointerDown (second child)')} onPointerEnter={e => console.log('onPointerEnter (second child)')} onPointerLeave={e => console.log('onPointerLeave (second child)')} onPointerMove={e => console.log('onPointerMove (second child)')} onPointerUp={e => console.log('onPointerUp (second child)')} style={{ padding: 20, backgroundColor: 'lightblue' }} > Secondo figlio </div> </div> ); }
Gestire eventi di focus
In React, gli eventi di focus propagano. Puoi usare currentTarget e relatedTarget per distinguere se gli eventi di focus o blur hanno origine al di fuori dell’elemento genitore. L’esempio mostra come rilevare il focus su un figlio, il focus sull’elemento genitore e come rilevare l’ingresso o l’uscita del focus dall’intero sottoalbero.
export default function FocusExample() { return ( <div tabIndex={1} onFocus={(e) => { if (e.currentTarget === e.target) { console.log('focused parent'); } else { console.log('focused child', e.target.name); } if (!e.currentTarget.contains(e.relatedTarget)) { // Non scatta quando si scambia il focus tra i figli console.log('focus entered parent'); } }} onBlur={(e) => { if (e.currentTarget === e.target) { console.log('unfocused parent'); } else { console.log('unfocused child', e.target.name); } if (!e.currentTarget.contains(e.relatedTarget)) { // Non scatta quando si scambia il focus tra i figli console.log('focus left parent'); } }} > <label> Nome: <input name="firstName" /> </label> <label> Cognome: <input name="lastName" /> </label> </div> ); }
Gestire eventi da tastiera
Questo esempio mostra alcuni comuni eventi da tastiera e quando scattano.
export default function KeyboardExample() { return ( <label> Nome: <input name="firstName" onKeyDown={e => console.log('onKeyDown:', e.key, e.code)} onKeyUp={e => console.log('onKeyUp:', e.key, e.code)} /> </label> ); }