Линтеры помогают выявлять потенциальные проблемы с доступностью на раннем этапе разработки интерфейсов. В экосистеме React Aria линтеры обеспечивают:
role, aria-*.Для работы с линтерами доступности в проектах React чаще всего используется плагин eslint-plugin-jsx-a11y. Он интегрируется с ESLint и проверяет JSX-разметку на соответствие лучшим практикам доступности.
npm install eslint eslint-plugin-jsx-a11y --save-dev
.eslintrc.js:module.exports = {
extends: [
'eslint:recommended',
'plugin:react/recommended',
'plugin:jsx-a11y/recommended'
],
plugins: ['jsx-a11y'],
rules: {
'jsx-a11y/anchor-is-valid': 'warn',
'jsx-a11y/alt-text': 'error',
'jsx-a11y/no-noninteractive-tabindex': 'warn'
},
settings: {
react: {
version: 'detect'
}
}
};
Ключевые моменты конфигурации:
extends: 'plugin:jsx-a11y/recommended' активирует
рекомендуемый набор правил доступности.rules позволяет включать строгие проверки для
критических элементов, таких как изображения (alt-text) или
интерактивные элементы (anchor-is-valid).warn вместо error позволяет
не блокировать сборку, но предупреждает о потенциальных проблемах.Для поддержания единообразного кода и совместимости линтинга с форматированием Prettier рекомендуется:
npm install prettier eslint-config-prettier eslint-plugin-prettier --save-dev
module.exports = {
extends: [
'plugin:jsx-a11y/recommended',
'plugin:prettier/recommended'
],
plugins: ['prettier'],
rules: {
'prettier/prettier': ['error']
}
};
Интеграция в CI/CD:
package.json:"scripts": {
"lint": "eslint src/**/*.jsx"
}
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 20
- run: npm install
- run: npm run lint
React Aria предоставляет низкоуровневые хелперы для управления фокусом, клавиатурными событиями и ролями. Для их корректной проверки следует:
role и aria-*
атрибуты явно в JSX.useButton, useMenu,
useListBox на соответствие рекомендациям
jsx-a11y.rules: {
'jsx-a11y/no-noninteractive-element-interactions': ['off', {
handlers: ['onClick', 'onKeyDown', 'onKeyUp', 'onKeyPress']
}]
}
Добавление кастомных правил: Можно создавать
собственные ESLint правила для специфических компонентов библиотеки
React Aria, например, проверку корректного использования
useFocusRing или useOverlayTrigger.
Комбинация с axe-core: Для динамических проверок
на этапе тестирования интегрировать eslint-plugin-jsx-a11y
с @axe-core/react:
import { axe } from '@axe-core/react';
if (process.env.NODE_ENV !== 'production') {
axe(React, ReactDOM, 1000);
}
Это позволяет выявлять проблемы, которые не покрываются статическим анализом.
--fix для многих правил. Например:npx eslint src/**/*.jsx --fix
@storybook/addon-a11y, который
визуализирует нарушения и подсвечивает элементы.error) и рекомендованные
(warn), чтобы сбалансировать строгий контроль и удобство
разработки.eslint-plugin-jsx-a11y, так как React Aria обновляется и
появляются новые рекомендации по атрибутам aria-*.