Reactjs — как перенаправить на домашнюю страницу по умолчанию

Я пытаюсь установить перенаправление на страницу по умолчанию, но не работает. как правильно это сделать?

const routes = [
    {
        path:"/",
        component:Home,
        extract:"true",
        redirect:"/home"
    },
    {
        path:"/home",
        component:Home
    },
    {
        path:"/service",
        component:Service
    }
];

HTML:

<div>
  <Router>
    <Header />
       {routes.map((route) => (
          <Route
            key = {route.path}
            path = {route.path}
            component = {route.component}
          />
                    ))}
   </Router>

Вы пытались объявить свой маршрут с косой чертой path = "/home"?

buzatto 19.12.2020 06:49

@buzatto - не повезло. страница не загружается, выдает ту же ошибку. но работает только целевая страница, когда я ставлю "/" вместо home

3gwebtrain 19.12.2020 06:51

о, ваш <Header /> должен быть внутри на маршрутизаторе, чтобы ссылки на ваш маршрутизатор работали правильно

buzatto 19.12.2020 06:55

это сработало после перехода к заголовку. это была проблема с кешем. но при обновлении страницы не загружается..

3gwebtrain 19.12.2020 07:03

По своей природе React был разработан для одностраничных приложений (SPA). По мере роста популярности были созданы такие библиотеки, как react-router, для имитации наличия нескольких страниц, но вы должны помнить, что на самом деле существует только одна конечная точка. Могу я спросить, почему вы обновляете страницу? Потому что большинство действий, которые запускают обновление (onSubmit, onClick и т. д.) на обычном веб-сайте, управляются React с использованием DOM без необходимости полного обновления страницы.

killshot13 19.12.2020 08:07

ты прав. но когда пользователь обновляется неправильно, как мы можем показать страницу по умолчанию, а не то, где он был. (в приложении есть только статическая страница)

3gwebtrain 19.12.2020 08:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
7
2 166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предполагая, что вы используете react-router-dom, я вижу одну окончательную проблему с некоторыми дополнительными проблемами. Возможно, вам потребуется внести только одно изменение, но я бы посоветовал просмотреть остальную часть вашего кода, чтобы обеспечить наилучшую конфигурацию маршрутизации.

Основная проблема: вам нужно добавить перенаправление на '/home', если вы хотите, чтобы этот компонент загружался первой страницей. Это связано с тем, что при рендеринге приложение видит путь по умолчанию как '/'.

<Redirect exact from = "/" to = "/home" />
  <Route path = "/home">
    <Home />
  </Route>

Хотя это может решить вашу проблему само по себе, вот более комплексное решение, которое должно быть полезно для сравнения с вашим текущим кодом.

import {
  BrowserRouter as Router,
  Switch,
  Route,
  Redirect
} from "react-router-dom";
import home from "./Home";
import service from "./Service";
import header from "./Header";

function App () {


    return (
      <div>
        <Router>
        <Header />
        <hr />
          <Switch>
            <Redirect exact from = "/" to = "/home" />
              <Route path = "/home">
                <Home />
              </Route>
              <Route exact path = "/service">
                <Service />
              </Route>
            </Switch>
          </Router>
        </div>
      );
    }


export default App;

Как видите, я бы рекомендовал переместить заголовок за пределы оператора Switch, а затем применить перенаправление с / на /home.

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

После сборки (в настоящее время все статические страницы) я загружаюсь на сервер chrome, пока я обновляю, но страница не загружается. получить как entry not found: /home как это исправить? Но все отлично работает с локальным хостом

3gwebtrain 19.12.2020 08:22

Можете ли вы уточнить, что вы имели в виду под хром-сервером? Какую платформу хостинга вы используете?

killshot13 19.12.2020 08:54

Я использую встроенный сервер Chrome, "127.0.0.1:8887" - он загружается отсюда. иначе представьте, что я использую экспресс, как с этим справиться?

3gwebtrain 19.12.2020 11:26

Я лично никогда не использовал этот сервер, поэтому я не уверен в конфигурации. Однако то, что вы описываете, вероятно, вызвано отсутствием маршрутизатора на стороне сервера (экспресс и т. д.). Есть несколько способов справиться с этим, но, по моему опыту, при использовании HashRouter или BrowserRouter обычно помогает запустить так называемый «маршрутизатор с подстановочными знаками» или «маршрутизатор сервера» на бэкэнде. Вот статья для справки.

killshot13 19.12.2020 14:50

Другие вопросы по теме