Библиотека Aria-query предоставляет мощные
инструменты для анализа и работы с ARIA-атрибутами и ролями в
веб-разработке. Одним из ключевых элементов является объект
requiredProps, который определяет обязательные свойства для
каждой роли ARIA. Этот механизм используется для проверки корректности
разметки с точки зрения доступности.
requiredPropsrequiredProps — это объект, в котором каждой роли ARIA
соответствует массив обязательных атрибутов,
необходимых для корректного функционирования этой роли в DOM.
Пример структуры:
import { roles } from 'aria-query';
const buttonRequiredProps = roles.get('button').requiredProps;
console.log(buttonRequiredProps); // { type: 'button' }
В этом примере видно, что для роли button требуется
атрибут type, значение которого по умолчанию должно быть
'button'. Если этот атрибут отсутствует, элемент не
полностью соответствует спецификации ARIA.
requiredPropsДля получения обязательных свойств используются объекты roles или elements из Aria-query.
import { roles } from 'aria-query';
const checkboxProps = roles.get('checkbox').requiredProps;
console.log(checkboxProps);
// { 'aria-checked': true/false/mixed }
Каждое обязательное свойство задается в виде ключа с ожидаемым значением, что позволяет легко проверять элементы на соответствие.
Для элементов HTML можно получить связанные роли и их обязательные свойства:
import { elements } from 'aria-query';
const buttonElement = elements.get('button');
console.log(buttonElement.roles);
// Map { 'button' => { requiredProps: { type: 'button' } } }
В этом случае elements.get('button') возвращает
информацию о ролях, которые могут быть назначены элементу
<button>, и их обязательных свойствах.
requiredPropsОбъект requiredProps имеет следующую типовую
структуру:
{
[attributeName]: expectedValue
}
Примеры:
roles.get('checkbox').requiredProps
// { 'aria-checked': ['true', 'false', 'mixed'] }
roles.get('link').requiredProps
// {} — роль link не требует обязательных свойств
Некоторые роли не имеют обязательных атрибутов, в таком случае
requiredProps возвращает пустой объект.
requiredProps для проверки доступностиС помощью requiredProps можно создавать функции для
валидирования разметки:
function validateRoleProps(element, roleName) {
const role = roles.get(roleName);
if (!role) return false;
const requiredProps = role.requiredProps;
for (const [prop, value] of Object.entries(requiredProps)) {
if (!(prop in element) || (Array.isArray(value) && !value.includes(element[prop]))) {
return false;
}
}
return true;
}
// Пример использования
const checkboxElement = { 'aria-checked': 'true' };
console.log(validateRoleProps(checkboxElement, 'checkbox')); // true
Эта функция проверяет, что элемент содержит все обязательные свойства роли и их значения соответствуют требованиям ARIA.
requiredProps для различных ролейРазные роли ARIA требуют разных наборов обязательных атрибутов:
| Роль | Обязательные свойства |
|---|---|
| button | type |
| checkbox | aria-checked |
| radio | aria-checked |
| slider | aria-valuemin, aria-valuemax, aria-valuenow |
| tab | aria-selected |
| option | aria-selected |
Такая таблица позволяет легко ориентироваться при создании автоматических проверок доступности и при динамической генерации элементов интерфейса.
requiredProps часто используется в связке с тестовыми
фреймворками для UI, например:
import { render } from '@testing-library/react';
import { roles } from 'aria-query';
import MyButton from './MyButton';
test('Button имеет обязательный тип', () => {
const { getByRole } = render(<MyButton />);
const button = getByRole('button');
const required = roles.get('button').requiredProps;
for (const [prop, value] of Object.entries(required)) {
expect(button[prop]).toBe(value);
}
});
Такой подход гарантирует, что компоненты соответствуют спецификации ARIA и поддерживают доступность для всех пользователей.
requiredPropsrequiredProps описывает обязательные
свойства каждой ARIA-ролии.Использование requiredProps делает код более надёжным и
доступным, снижая риск ошибок при работе с ARIA-атрибутами.