проблема с маршрутизацией в react

#javascript #reactjs

#javascript #reactjs

Вопрос:

Я сталкиваюсь с этой проблемой маршрутизации, когда после того, как пользователь нажимает / home, он перенаправляется на другой маршрут / home / render, и все в порядке. Однако, если кто-то нажмет home / live , я не вижу, чтобы он отображал Component1, который является желаемым. Вот ссылка на codesandbox . ссылка на песочницу

Вот мой основной компонент index.js

 import App from "./Components/App";
import Home from "./Components/Home";
import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";
class Parent extends React.Component {
  render() {
    return (
      <div>
        <Router>
          <Switch>
            <Route exact path="/" component={Page} />
            <Route exact path="/home" component={App} />
            <Route path="/home/render" component={Home} />
          </Switch>
        </Router>
      </div>
    );
  }
}

class Page extends React.Component {
  render() {
    return <div>Page</div>;
  }
}
const rootElement = document.getElementById("root");
ReactDOM.render(<Parent />, rootElement);
  

и это мой App.js

 class App extends React.Component {
  render() {
    const { match } = this.props;
    console.log("match.url", match.url);
    console.log("match.path", match.path);

    return (
      <div>
        <h1>App</h1>
        <Switch>
          <Redirect from={match.url} exact to={match.url   "/render"} />;
          <Route
            path={match.path   "/live"}
            render={routeProps => (
              <Component1
                matchBaseUrl={match.url}
                {...routeProps}
                matchId={100}
              />
            )}
          />
        </Switch>
      </div>
    );
  }
}
  

Я не поставил component.js потому что это всего лишь простой компонент, который я отображаю на экране, когда мы нажимаем home / live .

Ответ №1:

Component1 никогда не отображается, потому что вы устанавливаете для exact prop значение true на /home маршруте, что сделает его таким, чтобы он совпадал только в том случае, если путь /home и ничего более.

Вы можете удалить exact реквизит и переместить маршрут ниже /home/render маршрута, чтобы он имел приоритет, и он будет работать так, как ожидалось.

 <Switch>
  <Route exact path="/" component={Page} />
  <Route path="/home/render" component={Home} />
  <Route path="/home" component={App} />
</Switch>