В React есть несколько способов сделать редирект без использования оператора return
в функциональном компоненте.
- Использование хука
useEffect
:
import React, { useEffect } from 'react'; import { useHistory } from 'react-router-dom'; const MyComponent = () => { const history = useHistory(); useEffect(() => { history.push('/new-path'); // выполняем редирект при монтировании компонента }, []); // пустой массив зависимостей для выполнения эффекта только один раз return <div>Редирект...</div>; // можно вернуть любой контент, но он не будет отображаться };
- Использование компонента
Redirect
из пакетаreact-router-dom
:
import React from 'react'; import { Redirect } from 'react-router-dom'; const MyComponent = () => { return <Redirect to="/new-path" />; };
В этом случае важно, чтобы компонент Redirect
был вложен в компонент Switch
, а также чтобы в маршрутах была определена точная соответствующая требуемому пути обработка.
- Использование классового компонента и метода
componentDidMount()
:
import React from 'react'; class MyComponent extends React.Component { componentDidMount() { this.props.history.push('/new-path'); } render() { return <div>Редирект...</div>; } }
В этом случае компонент должен быть обернут в компонент withRouter
из пакета react-router-dom
, чтобы передать объект history
в свойства компонента.
Однако, следует отметить, что использование редиректа вне оператора return
может представлять некоторые сложности, поскольку в этом случае компонент не будет отображаться. Если вам нужно выполнить редирект после какого-либо действия, обычно более правильным подходом является использование параметра состояния, условного рендеринга или оператора return
в теле компонента.