> Как построить приложение на React и Redux для обработки данных из веб-сокетов и отображения на UI (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Стек: React

> Пример ответа

Для построения приложения на React и Redux с веб-сокетами и отображением данных на UI, следуйте этой архитектуре:

  1. Настройка Redux store с middleware для обработки сокетов (например, redux-saga или redux-thunk). Создайте slice для данных из сокета:
JAVASCRIPT
import { createSlice } from '@reduxjs/toolkit';
const socketSlice = createSlice({
name: 'socketData',
initialState: { data: [], status: 'disconnected' },
reducers: {
setData: (state, action) => { state.data.push(action.payload); },
setStatus: (state, action) => { state.status = action.payload; }
}
});
  1. Создайте сервис для WebSocket в отдельном файле:
JAVASCRIPT
class WebSocketService {
constructor(dispatch) {
this.ws = null;
this.dispatch = dispatch;
}
connect(url) {
this.ws = new WebSocket(url);
this.ws.onopen = () => dispatch(setStatus('connected'));
this.ws.onmessage = (event) => dispatch(setData(JSON.parse(event.data)));
this.ws.onclose = () => dispatch(setStatus('disconnected'));
}
}
  1. Инициализируйте сокет в корневом компоненте через useEffect:
JAVASCRIPT
function App() {
const dispatch = useDispatch();
useEffect(() => {
const socketService = new WebSocketService(dispatch);
socketService.connect('wss://example.com/data');
return () => socketService.ws?.close();
}, [dispatch]);
return <DataDisplay />;
}
  1. Компонент отображения использует useSelector для получения данных:
JAVASCRIPT
function DataDisplay() {
const data = useSelector(state => state.socketData.data);
const status = useSelector(state => state.socketData.status);
return (
<div>
<p>Статус: {status}</p>
<ul>{data.map((item, i) => <li key={i}>{item.value}</li>)}</ul>
</div>
);
}
  1. Оптимизация: используйте useMemo для фильтрации данных, добавьте обработку ошибок и реконнект при разрыве соединения. Для больших потоков данных применяйте виртуализацию (react-window) и debounce обновлений.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью