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.