Реагує ігнорує атрибут "для" елемента мітки


250

У React (фрейсбук Facebook) мені потрібно зробити елемент мітки, прив’язаний до введення тексту, використовуючи стандартний forатрибут.

наприклад, використовується наступний JSX:

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

Однак у результаті цього HTML не вистачає необхідного (і стандартного) forатрибута:

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

Що я роблю неправильно?

Відповіді:


484

forАтрибут називається htmlForузгодженість з DOM властивостей API. Якщо ви використовуєте розробку для складання React, вам слід було б побачити попередження на консолі про це.


4
Дякую Бен. Чи можете ви пояснити мені "відповідність API DOM"?
goofballLogic

17
Якщо у вас є labelелемент (повернутий document.createElement, document.getElementByIdі т. Д.), Ви отримаєте доступ до його forвластивості як label.htmlFor.
Софі Альперт

3
@Meglio У HTML вам потрібен ідентифікатор для роботи атрибута. Щоб зробити ваш компонент багаторазовим, ви можете додати властивість імені до свого компонента, який ви встановите як ідентифікатор та атрибут імені у фактичному полі введення.
Вім Мостманс

2
Незважаючи на це, я знайшов відповідь тут . Кажуть, використовувати генератор ідентифікаторів.
Тобія

2
@BenAlpert Дякую за пролиття світла на це. Я ніколи не переглядав API DOM через jQuery та інше (пробачте мене). Але якщо хтось інший зацікавлений дізнатися більше про це, перегляньте developer.mozilla.org/en-US/docs/Web/API/HTMLLabelElement .
alvincrespo


13

Для React ви повинні використовувати ключові слова, визначені для визначення атрибутів html.

class -> className

використовується і

for -> htmlFor

використовується, оскільки реакція чутлива до регістру, переконайтеся, що ви повинні слідувати малому та капіталу, як потрібно.


3

обидва forі classє зарезервованими словами в JavaScript. Ось чому, якщо мова йде про атрибути HTML в JSX, вам потрібно використовувати щось інше, команда React вирішила використовувати htmlForі classNameвідповідно


1
Це абсолютно нічого спільного з цим не має. Перетворення JSX може просто перевести його у "клас", що також справедливо для імен властивостей. Насправді в Preact можна використовувати як class, так і className.
Malte R

3
Хоча React міг перетворити його в JSX, він не робить. Їх документи (станом на 25 березня 2020 року) стверджують, «оскільки forце застережене слово в JavaScript, htmlForзамість цього використовують елементи React .»: Reactjs.org/docs/dom-elements.html#htmlfor
nirvdrum

@MalteR ви можете сказати це IE8, IE7 та IE6
Trident D'Gao


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.