Рендеринг части компонента только на нескольких маршрутах - PullRequest
0 голосов
/ 04 июня 2019

У меня есть приложение, и я использую реагирующий маршрутизатор. На каждом маршруте я рендерил Navbar, а в Navbar у меня есть поле ввода, которое я хочу визуализировать только на двух маршрутах. Как мне это сделать ? Есть ли какое-либо «Если», которое я могу использовать для визуализации части компонента при совпадении маршрута?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Мы можем использовать match.url для этого.

Рабочий код. Здесь мы добавляем route matched к URL-адресу маршрутизатора, если маршрут /topics/rendering

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

function BasicExample() {
  return (
    <Router>
      <div>
        <ul>
          <li>
            <Link to="/">Home</Link>
          </li>
          <li>
            <Link to="/topics">Topics</Link>
          </li>
        </ul>

        <hr />

        <Route exact path="/" component={Home} />
        <Route path="/topics" component={Topics} />
      </div>
    </Router>
  );
}

function Home() {
  return (
    <div>
      <h2>Home</h2>
    </div>
  );
}

function Topics({ match }) {
  return (
    <div>
      <h2>Topics</h2>
      <ul>
        <li>
          <Link to={`${match.url}/rendering`}>Rendering with React</Link>
        </li>
        <li>
          <Link to={`${match.url}/components`}>Components</Link>
        </li>
      </ul>

      <Route path={`${match.path}/:topicId`} component={Topic} />
      <Route
        exact
        path={match.path}
        render={() => <h3>Please select a topic.</h3>}
      />
    </div>
  );
}

function Topic({ match }) {
  if (match.url === '/topics/rendering') {
    return (
    <div>
      <h3>route matched {match.params.topicId}</h3>
    </div>
  )
  } else {
    return (
      <div>
        <h3>{match.params.topicId}</h3>
      </div>
    )

  }

}

export default BasicExample;
1 голос
/ 04 июня 2019

В вашем Route у вас будет коллекция RouteParams (совпадение, местоположение и история).Вы можете использовать, например, location.pathname для условного рендеринга всего, что вы хотите.

Что-то вроде:

<Router>
  <Route render={({match,location,history})=>{
    const showNavFields = location.pathname==='/your-path'
    return {
     <NavBar showNavFields={showNavFields}/>  
    }
 }}/>
 <Switch>
   <Route path="/your-path" component="AComponent"/ >
   <Route path="/your-other-path" component="AnotherComponent"/ >
 </Switch>
</Router>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...