[英]React htmlFor - clicking label focus on the wrong input
我有以下代碼:
const SomeComponent = () => {
return (
<div>
<label className={styles.label} htmlFor="firstName">
First Name
</label>
<input type="text" id="firstName" value={user.firstName} />
</div>
<div>
<label className={styles.label} htmlFor="lastName">
Last Name
</label>
<input type="text" id="lastName" value={user.lastName} />
</div>
<div>
<label className={styles.label} htmlFor="email">
Email
</label>
<input type="email" id="email" value={user.email} />
</div>);
}
它在同一頁面上的多個位置呈現。 單擊中間元素的 label 始終會在第一個輸入上創建焦點,而不是在它附近的輸入上。
我如何確保 label 專注於正確的輸入(靠近它的那個,它在同一個組件中)而不是第一個(渲染的第一個SomeComponent
)?
您必須確保 id 在整個頁面中是唯一的。 所以看起來你有幾個輸入使用 id email
這就是頁面中的第一個輸入獲得焦點的原因。
解決它的一種方法是將id
作為道具傳遞給組件。
const SomeComponent = ({id}) => {
return (
<div>
<label className={styles.label} htmlFor={`firstName-${id}`}>
First Name
</label>
<input type="text" id= {`firstName-${id}`} value={user.firstName} />
</div>
<div>
<label className={styles.label} htmlFor= {`lastName-${id}`} >
Last Name
</label>
<input type="text" id= {`lastName-${id}`} value={user.lastName} />
</div>
<div>
<label className={styles.label} htmlFor= {`email-${id}`} >
Email
</label>
<input type="email" id= {`email-${id}`} value={user.email} />
</div>);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.