inert を指定する in React + TypeScript


ボタンやフォームに対してフォーカスイベントが発生しないようにしたいときにはdisabled属性でコントロールできるわけですが、

「個々に属性を指定するのは中々煩わしい!!私はこの非表示にしている要素の中身全部をフォーカス当たらないようにしたいんだよ!!」

というような事もあると思います。

古いブラウザには対応していませんが、inert属性が便利です。

https://developer.mozilla.org/ja/docs/Web/HTML/Global_attributes/inert

要素およびそのコンテンツをアクセシビリティツリーから除外することで、支援技術から隠します。

ここまでしてくれる!すばらしい!

ただ新しくできた属性なので、React + TypeScript で開発しているとデフォルトではまだ型定義がなくてエラーが出てしまいます。(少なくとも私の使ってるバージョンでは)ignoreはできる限りしたくないものです。一番いいのはおそらく定義を追加してやることですが、オブジェクトでラップすると回避できるという話を見つけました。下のような感じ。

<div {...{inert:(isActive ? undefined : '')}}>>
</div>

もしかしたら最新バージョンではもういらない対応かもしれませんが、今後も新しい属性を使うときにはお世話になりそうです。