Для начала работы с библиотекой React Aria в проекте на JavaScript необходимо подготовить современную среду сборки. В качестве инструмента сборки используется Webpack, обеспечивающий модульность, поддержку JSX и интеграцию с React.
mkdir react-aria-webpack
cd react-aria-webpack
npm init -y
npm install react react-dom @react-aria/utils @react-aria/button
Здесь @react-aria/utils предоставляет низкоуровневые
утилиты для управления фокусом, событиями и ARIA-атрибутами, а
@react-aria/button обеспечивает готовые хук-компоненты для
кнопок с поддержкой доступности.
npm install --save-dev webpack webpack-cli webpack-dev-server babel-loader @babel/core @babel/preset-env @babel/preset-react html-webpack-plugin css-loader style-loader
Эти пакеты позволят обрабатывать JS, JSX и стили, а также запускать локальный сервер с горячей перезагрузкой.
Создание файла webpack.config.js:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {
entry: './src/index.jsx',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
clean: true,
},
resolve: {
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: 'babel-loader',
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
}),
],
devServer: {
static: path.join(__dirname, 'dist'),
hot: true,
port: 3000,
open: true,
},
mode: 'development',
};
babel-loader и стили.Создание файла .babelrc:
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
Рекомендуемая структура:
react-aria-webpack/
├─ public/
│ └─ index.html
├─ src/
│ ├─ index.jsx
│ ├─ App.jsx
│ └─ styles.css
├─ package.json
├─ webpack.config.js
└─ .babelrc
Пример базового HTML в public/index.html:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>React Aria App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
Файл src/App.jsx с кнопкой, поддерживающей
доступность:
import React from 'react';
import { useButton } from '@react-aria/button';
export default function App() {
const ref = React.useRef();
const { buttonProps } = useButton(
{ onPress: () => alert('Нажата кнопка') },
ref
);
return (
<div style={{ padding: '20px' }}>
<button {...buttonProps} ref={ref}>
Нажми меня
</button>
</div>
);
}
Файл src/index.jsx:
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import './styles.css';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App />);
Файл src/styles.css:
body {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
margin: 0;
padding: 0;
}
button {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
}
Webpack автоматически импортирует стили через
style-loader и css-loader.
package.json:"scripts": {
"start": "webpack serve --mode development",
"build": "webpack --mode production"
}
npm start
Приложение будет доступно по адресу
http://localhost:3000, кнопка будет полностью функциональна
с поддержкой ARIA.
Эта настройка обеспечивает современный React проект с Webpack, готовый к интеграции любых компонентов React Aria, с поддержкой JSX, CSS и горячей перезагрузкой. Такой подход обеспечивает модульность, расширяемость и готовность к масштабированию приложения.