Этот вопрос проверяет умение синхронизировать маршруты React Router DOM
Интеграция React Router DOM с Redux позволяет использовать состояние Redux для управления маршрутизацией, например, для перенаправлений на основе состояния пользователя. Это достигается через использование хуков, таких как useSelector и useDispatch, в компонентах маршрутов.
Пример с проверкой аутентификации через Redux:
Создайте хранилище Redux с состоянием пользователя:
const initialState = { isAuthenticated: false };
const authReducer = (state = initialState, action) => {
switch (action.type) {
case 'LOGIN':
return { ...state, isAuthenticated: true };
case 'LOGOUT':
return { ...state, isAuthenticated: false };
default:
return state;
}
};Подключите Redux к React приложению:
import { Provider } from 'react-redux';
import { createStore } from 'redux';
const store = createStore(authReducer);
const App = () => (
<Provider store={store}>
<MainRouter />
</Provider>
);Использование состояния Redux в маршрутах:
Проверьте состояние перед рендерингом защищенных маршрутов:
import { useSelector } from 'react-redux';
import { Navigate } from 'react-router-dom';
const ProtectedRoute = ({ children }) => {
const isAuthenticated = useSelector(state => state.isAuthenticated);
return isAuthenticated ? children : <Navigate to="/login" />;
};Интеграция с редиректами:
Используйте useDispatch для программной смены маршрутов:
import { useDispatch } from 'react-redux';
import { useNavigate } from 'react-router-dom';
const LoginPage = () => {
const dispatch = useDispatch();
const navigate = useNavigate();
const handleLogin = () => {
dispatch({ type: 'LOGIN' });
navigate('/dashboard');
};
return <button onClick={handleLogin}>Войти</button>;
};Преимущества:
Централизация управления состоянием и маршрутизацией.
Удобство перенаправлений на основе глобального состояния.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию