最後に、私は唯一の2つのソリューションを参照してください。
1を私はすべてのそれらのアクションをカプセル化するコンポーネントを作成することができます...しかし、これはボタンの作品です。そして私は、これはただの例外のためであり、これはプロジェクト内部の悪質な振る舞いを作成することができ、私のプロジェクトにボタンを作成するための新しい方法を開くことがないしたいです。そして、そのために、私たちは別のコンポーネント...]ボタン:)
2を持っているアクションのデコレータを作成します。
export function a11yButtonActionHandler(target, key, descriptor) {
const fn = descriptor.value;
if (typeof fn !== 'function') {
throw new Error(`@a11yButtonActionHandler decorator can only be applied to methods not: ${typeof fn}`);
}
descriptor.value = function actionHandler(event) {
if (!event || event.type === 'click' ||
(['keydown', 'keypress'].includes(event.type) && ['Enter', ' '].includes(event.key))
) {
fn.call(this, event);
}
};
return descriptor;
}
デコレータを使用してください。
@a11yButtonActionHandler
myAction(element) {
...
}
<div className="element-with-very-good-excuse-to-dont-be-a-button"
role="button"
tabIndex="0"
onKeyDown={ this.myAction }
onClick={ this.myAction }>
あなたが状態を使用してみましたが?私は理解していない – alireza
@alirezaは、私はここの状態を使用する方法の詳細ヒントが必要になります。申し訳ありません –
私は答えに少しの記述を書いています。 – alireza