В React есть несколько способов сделать редирект без использования оператора return
в функциональном компоненте.
1. Использование хука 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>; // можно вернуть любой контент, но он не будет отображаться };
2. Использование компонента Redirect
из пакета react-router-dom
:
import React from 'react'; import { Redirect } from 'react-router-dom'; const MyComponent = () => { return <Redirect to="/new-path" />; };
В этом случае важно, чтобы компонент Redirect
был вложен в компонент Switch
, а также чтобы в маршрутах была определена точная соответствующая требуемому пути обработка.
3. Использование классового компонента и метода 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
в теле компонента.