React ignora l'attributo 'for' dell'elemento label


250

In React (framework di Facebook), devo rendere un elemento etichetta associato a un input di testo usando l' forattributo standard .

ad esempio, viene utilizzato il seguente JSX:

<label for="test">Test</label>
<input type="text" id="test" />

Tuttavia, questo produce HTML privo fordell'attributo richiesto (e standard) :

<label>Test</label>
<input type="text" id="test">

Che cosa sto facendo di sbagliato?

Risposte:


484

L' forattributo viene chiamato htmlForper coerenza con l'API della proprietà DOM. Se stai usando la build di sviluppo di React, dovresti aver visto un avviso nella tua console a riguardo.


4
Grazie Ben. Potresti spiegare "per coerenza con l'API DOM" per me?
— goofballLogic

17
Se si dispone di un labelelemento (come restituito da document.createElement, document.getElementById, ecc) che ci si accede la sua forproprietà come label.htmlFor.
— Sophie Alpert,

3
@Meglio In HTML è necessario un ID affinché l'attributo for funzioni. Per rendere riutilizzabile il componente, è possibile aggiungere una proprietà name al componente impostata come ID e come attributo name nel campo di input effettivo.
— Wim Mostmans,

2
Non importa, ho trovato la risposta qui . Dicono di usare un generatore di ID.
— Tobia,

2
@BenAlpert Grazie per avermi fatto luce. Non ho mai guardato l'API DOM a causa di jQuery e roba del genere (per favore perdonami). Ma nel caso in cui qualcun altro sia interessato a saperne di più, controlla developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement .
— alvincrespo,


13

Per React devi usare le sue parole chiave per definire per definire gli attributi html.

class -> className

è usato e

for -> htmlFor

viene utilizzato, poiché la reazione fa distinzione tra maiuscole e minuscole, assicurarsi di seguire le lettere minuscole e maiuscole come richiesto.


3

entrambi fore classsono parole riservate in JavaScript, ecco perché quando si tratta di attributi HTML in JSX devi usare qualcos'altro, il team di React ha deciso di usare htmlFore classNamerispettivamente


1
Questo non ha assolutamente nulla a che fare con quello. La trasformazione JSX potrebbe semplicemente tradurla in "classe", che è valida anche per i nomi delle proprietà. In effetti, in Preact è possibile utilizzare sia class che className.
— Malte R,

3
Mentre React potrebbe trasformarlo in JSX, non lo fa. I loro documenti (a partire dal 25-Mar-2020) dello stato "Dal momento che forè una parola riservata in JavaScript, Reagire elementi usano htmlForinvece.": Reactjs.org/docs/dom-elements.html#htmlfor
— nirvdrum

@MalteR puoi dirlo a IE8, IE7 e IE6
— Trident D'Gao


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.