jsx-a11y/click-events-have-key-events と jsx-a11y/no-static-element-interactionsの対応
備忘録
ソースコード
下記のコードは2つのエラーが発生します。
import React from 'react'; const Component = () => ( <div onClick={() => {}} > {/* 何らかのコンテンツ */} </div> ); export default Component;
エラー1.
Visible, non-interactive elements with click handlers must have at least one keyboard listener.eslint (jsx-a11y/click-events-have-key-events)
エラー2.
Static HTML elements with event handlers require a role.eslint (jsx-a11y/no-static-element-interactions)
jsx-a11y/click-events-have-key-eventsの対応
import React from 'react';
const Component = () => (
<div
onClick={() => {}}
+ onKeyDown={() => {}}
>
{/* 何らかのコンテンツ */}
</div>
);
export default Component;
jsx-a11y/click-events-have-key-eventsの原因
onClickイベントを使用する場合、マウスを使用できないユーザーのために、
onKeyUp
onKeyDown
onKeyPress
のうち、少なくとも1つを設定する必要がある。
(キーボードによる操作を可能にするため)
詳細
jsx-a11y/no-static-element-interactionsの対応
import React from 'react'; const Component = () => ( <div onClick={() => {}} onKeyDown={() => {}} + role="button" + tabIndex={0} > {/* 何らかのコンテンツ */} </div> ); export default Component;
jsx-a11y/no-static-element-interactionsの原因
div
などの静的なHTML要素にマウスやキーイベントを設定をする場合、
要素のロールを設定する必要がある。
詳細