Ant Design предоставляет богатый набор UI-компонентов, которые в сочетании с Redux позволяют строить масштабируемые и предсказуемые интерфейсы. Основная цель — управление состоянием приложения через централизованный стор Redux, обеспечивая синхронизацию данных между компонентами Ant Design.
npm install redux react-redux @reduxjs/toolkit
import { configureStore } from '@reduxjs/toolkit';
import userReducer from './slices/userSlice';
export const store = configureStore({
reducer: {
user: userReducer,
},
});
import { createSlice } from '@reduxjs/toolkit';
const initialState = {
users: [],
loading: false,
error: null,
};
const userSlice = createSlice({
name: 'user',
initialState,
reducers: {
fetchUsersStart: state => { state.loading = true; },
fetchUsersSuccess: (state, action) => {
state.loading = false;
state.users = action.payload;
},
fetchUsersFailure: (state, action) => {
state.loading = false;
state.error = action.payload;
},
},
});
export const { fetchUsersStart, fetchUsersSuccess, fetchUsersFailure } = userSlice.actions;
export default userSlice.reducer;
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { store } from './store';
import App from './App';
ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
Ant Design Table — мощный инструмент для отображения
данных. Интеграция с Redux позволяет управлять источником данных
централизованно.
import React, { useEffect } from 'react';
import { Table, Spin, Alert } from 'antd';
import { useDispatch, useSelector } from 'react-redux';
import { fetchUsersStart, fetchUsersSuccess, fetchUsersFailure } from './slices/userSlice';
const UserTable = () => {
const dispatch = useDispatch();
const { users, loading, error } = useSelector(state => state.user);
useEffect(() => {
const fetchData = async () => {
dispatch(fetchUsersStart());
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const data = await response.json();
dispatch(fetchUsersSuccess(data));
} catch (err) {
dispatch(fetchUsersFailure(err.toString()));
}
};
fetchData();
}, [dispatch]);
const columns = [
{ title: 'ID', dataIndex: 'id', key: 'id' },
{ title: 'Имя', dataIndex: 'name', key: 'name' },
{ title: 'Email', dataIndex: 'email', key: 'email' },
];
if (loading) return <Spin tip="Загрузка..." />;
if (error) return <Alert message="Ошибка" description={error} type="error" showIcon />;
return <Table dataSource={users} columns={columns} rowKey="id" />;
};
export default UserTable;
Ключевые моменты:
useSelector для доступа к данным
стора.useDispatch для изменения
состояния.Spin и
Alert.Ant Design Form интегрируется с Redux для управления
состоянием полей и валидацией.
import React from 'react';
import { Form, Input, Button } from 'antd';
import { useDispatch } from 'react-redux';
import { addUser } from './slices/userSlice';
const UserForm = () => {
const dispatch = useDispatch();
const onFin ish = (values) => {
dispatch(addUser(values));
};
return (
<Form
layout="vertical"
onFin ish={onFinish}
>
<Form.Item
label="Имя"
name="name"
rules={[{ required: true, message: 'Введите имя пользователя' }]}
>
<Input />
</Form.Item>
<Form.Item
label="Email"
name="email"
rules={[{ required: true, message: 'Введите email' }]}
>
<Input />
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">
Добавить пользователя
</Button>
</Form.Item>
</Form>
);
};
export default UserForm;
Особенности:
onFinish отправляет данные формы в Redux.rules.Form.useForm().Компонент Modal часто используется для редактирования
данных, его состояние удобно хранить в Redux.
import React from 'react';
import { Modal, Button } from 'antd';
import { useDispatch, useSelector } from 'react-redux';
import { toggleModal } from './slices/uiSlice';
const EditModal = () => {
const dispatch = useDispatch();
const { isModalOpen } = useSelector(state => state.ui);
return (
<>
<Button type="primary" onCl ick={() => dispatch(toggleModal(true))}>
Редактировать
</Button>
<Modal
title="Редактирование"
open={isModalOpen}
onCan cel={() => dispatch(toggleModal(false))}
footer={null}
>
{/* Содержимое формы */}
</Modal>
</>
);
};
export default EditModal;
Особенности:
Ant Design notification и message
используются для информирования пользователя о результатах действий.
Redux может хранить статус операции и триггерить уведомления.
import { notification } from 'antd';
const notifySuccess = (text) => {
notification.success({
message: 'Успешно',
description: text,
placement: 'topRight',
});
};
Использование в Redux-слайсе после успешного действия позволяет держать UI реактивным.
createAsyncThunk для
асинхронных операций и интеграции с Ant Design Spin.theme и
ConfigProvider для глобальной стилизации, совместимой с
Redux.Redux и Ant Design вместе создают архитектуру, где состояние приложения предсказуемо, а интерфейс гибко управляется компонентами. Такая комбинация особенно полезна для сложных таблиц, форм, модальных окон и уведомлений, где важно синхронизировать данные и визуальное представление.