Phản ứng bỏ qua thuộc tính 'for' của thành phần nhãn


250

Trong React (khung của Facebook), tôi cần kết xuất phần tử nhãn được liên kết với kiểu nhập văn bản bằng forthuộc tính tiêu chuẩn .

ví dụ: JSX sau được sử dụng:

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

Tuy nhiên, điều này tạo ra HTML thiếu thuộc tính bắt buộc (và tiêu chuẩn) for:

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

Tôi đang làm gì sai?

Câu trả lời:


484

Các forthuộc tính được gọi là htmlFornhất quán với các API hữu DOM. Nếu bạn đang sử dụng bản phát triển React, bạn sẽ thấy cảnh báo trong bảng điều khiển của mình về điều này.


4
Cảm ơn Ben. Bạn có thể giải thích "về tính nhất quán với API DOM" cho tôi không?
goofballLogic

17
Nếu bạn có một labelyếu tố (như trả về bởi document.createElement, document.getElementById, vv), bạn muốn truy cập nó forbất động sản như label.htmlFor.
Sophie Alpert

3
@Meglio Trong HTML, bạn cần ID cho thuộc tính for hoạt động. Để làm cho thành phần của bạn có thể sử dụng lại, bạn có thể thêm thuộc tính tên vào thành phần mà bạn đặt làm ID và thuộc tính tên trên trường nhập thực tế.
Wim Mostmans 23/2/2015

2
Nevermind, tôi tìm thấy câu trả lời ở đây . Họ nói sẽ sử dụng một trình tạo ID.
Tobia

2
@BenAlpert Cảm ơn bạn đã làm sáng tỏ điều đó. Tôi chưa bao giờ sử dụng để xem DOM API bởi vì jQuery và các công cụ (xin vui lòng tha thứ cho tôi). Nhưng trong trường hợp bất kỳ ai khác quan tâm đến việc tìm hiểu thêm về điều đó, hãy xem developer.mozilla.org/en-US/docs/Web/API/HTMLLabelEuity .
alvincrespo


13

Đối với React, bạn phải sử dụng các từ khóa theo định nghĩa để xác định các thuộc tính html.

class -> className

được sử dụng và

for -> htmlFor

được sử dụng, vì phản ứng là trường hợp nhạy cảm, đảm bảo bạn phải tuân theo quy mô nhỏ và vốn theo yêu cầu.


3

cả hai forclassđược dành riêng các từ trong JavaScript, đây là lý do tại sao khi nói đến các thuộc tính HTML trong JSX, bạn cần sử dụng một thứ khác, nhóm React quyết định sử dụng htmlForclassNametương ứng


1
Điều đó hoàn toàn không có gì để làm với điều đó. Chuyển đổi JSX chỉ có thể dịch nó thành 'lớp', cũng hợp lệ cho tên thuộc tính. Trong thực tế, trong Preact, bạn có thể sử dụng cả class và className.
Malte R

3
Mặc dù React có thể chuyển đổi nó trong JSX, nhưng nó không. Tài liệu của họ (kể từ ngày 25 tháng 3 năm 2020) nói "Vì forlà một từ dành riêng trong JavaScript, nên các phần tử React sử dụng htmlForthay thế.": Reacjs.org/docs/dom-elements.html#htmlfor
nirvdrum 25/03

@MalteR bạn có thể nói với IE8, IE7 và IE6
Trident D'Gao


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.