Маршрут Рендеринг перенаправление с помощью react-router-dom

#reactjs #react-router-dom

#reactjs #react-router-dom

Вопрос:

Я только что перенял проект React у одного из моих коллег, но я не могу понять логику в приведенном ниже коде.

       content = <Switch>
        <Route path="/login" exact component={LoginPage} />
        <Route render={() => { return <Redirect to="/login" />; }} />
      </Switch>
  

Я знаю, как использовать маршрут с Component , с Render , но Render с Redirect я впервые это увидел.

Спасибо

Комментарии:

1. Абсолютно нет необходимости вызывать Redirect в render, вы могли бы просто поместить его напрямую вместо Route

Ответ №1:

Похоже, это просто еще один способ просто сказать:

 <Redirect path='*' to='/login' />
  

Поскольку он находится внутри <Switch> и после any <Route> , он всегда будет соответствовать (если ничего выше не было сопоставлено) и будет отрисован.

Когда Redirect компонент отрисовывается, он выполняет свою работу по перенаправлению на страницу, указанную в to реквизите.

Я выяснил это, немного почитав исходный код. Если вам интересно, есть небольшая косвенность, но в основном компонент перенаправления отображает компонент жизненного цикла, который будет вызываться method с location предоставленным, как только он будет смонтирован.

method устанавливается следующим образом:

 const method = push ? history.push : history.replace;
  

И это делается таким образом, потому что, по-видимому, <Redirect> компонент может использовать push в качестве логической поддержки, чтобы задать поведение того, как на самом деле достигается перенаправление.


Перенаправить источник компонента https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Redirect.js

Источник компонента жизненного цикла: https://github.com/ReactTraining/react-router/blob/master/packages/react-router/modules/Lifecycle.js

Комментарии:

1. Является ли это хорошей практикой для подобных действий, я не знаю. Насколько я могу судить, в конечном результате нет большой разницы. Однако для читателя и для удобства сопровождения это может немного сбить с толку.