Skip to content
← Back to rules

jsx-a11y/label-has-associated-control 正しさ

何を検査するか

label タグがテキストラベルと関連するコントロールを持つことを強制します。

なぜ悪いのか

フォームのラベルが適切にフォームコントロール(例:<input>)と関連付けられていない、またはアクセシブルなテキストを含んでいない場合、スクリーンリーダーなどの補助技術を利用しているユーザーにとってアクセシビリティが損なわれます。その結果、ユーザーがフォームコントロールの目的を十分に理解できなくなる可能性があります。

このルールに対して不正なコードの例:

jsx
function Foo(props) {
    return <label {...props} />
}

<input type="text" />
<label>Surname</label>

このルールに対して正しいコードの例:

jsx
function Foo(props) {
  const { htmlFor, ...otherProps } = props;

  return <label htmlFor={htmlFor} {...otherProps} />;
}

<label>
  <input type="text" />
  Surname
</label>;

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。

assert

type: "htmlFor" | "nesting" | "both" | "either"

default: "either"

ラベルとコントロールの間で必要な関連付けの種類。

controlComponents

type: string[]

default: []

フォームコントロールとして扱われるカスタム JSX コンポーネント。

depth

type: integer

default: 2

ネストされたコントロールを探索する最大の深さ。

labelAttributes

type: string[]

default: ["alt", "aria-label", "aria-labelledby"]

アクセシブルなラベルテキストをチェックする属性。

labelComponents

type: string[]

default: ["label"]

ラベルとして扱われるカスタム JSX コンポーネント。

使い方

このルールを構成ファイルまたは CLI で有効化するには、次のように使用できます:

json
{
  "plugins": ["jsx-a11y"],
  "rules": {
    "jsx-a11y/label-has-associated-control": "error"
  }
}
bash
oxlint --deny jsx-a11y/label-has-associated-control --jsx-a11y-plugin

参照