Вложенный маршрутизатор React: скрыть родительский компонент при отображении вложенного дочернего компонента

Будучи новичком в reactJS, я хочу знать, как скрыть родительский компонент, когда я перехожу к URL-адресу дочернего компонента.

Предположим сценарий:

Пользователь находится в "/ house" следующим образом:

<Route path = "/house" component = {House} />

Вложенный маршрутизатор React: скрыть родительский компонент при отображении вложенного дочернего компонента

когда пользователь щелкает сетку дома, он переходит к «/ house / flat /: flatID». Компонент Inside House

<Route
    path = {`${this.props.match.url}/flat/:flatId`}
    render = {() => <div>Each Flat details</div>}
/>

тогда и дочерний, и родительский компоненты видны следующим образом: Вложенный маршрутизатор React: скрыть родительский компонент при отображении вложенного дочернего компонента

Итак, я хочу отображать только плоский компонент, когда пользователь переходит к «/ house / flat: FlatId». Пожалуйста, предложите мне что-нибудь, что поможет! Любые ссылки на статью, чтобы я мог изучить и достичь такой функциональности.

Код:

App.js

<Switch>
    <Route exact path = "/" component = {Home} />
    <Route exact path = "/account" component = {Account} />
    <Route path = "/gharjagga" component = {GharJagga} />
</Switch>

House.js

onGharGridClick= id => {
    <Redirect to = {`${this.props.match.url}/flat/${id}`} />;
};

return (
    <Route
        path = {`${this.props.match.url}/flat/:fkatId`}
        render = {() => <div>Ghar Each</div>}
    />
);

Вы хотите сменить маршрут, верно? Или поделитесь кодом маршрута

Hafeez Hamza 10.11.2018 06:39

когда пользователь щелкает любую сетку, он переходит к / house / flat / flatID, тогда то, что я хочу показать в этом URL-адресе, - это только плоские детали, вместо этого отображаются и House, и Flat Details.

Efrain Sanjay Adhikary 10.11.2018 06:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
2
5 106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Решение состоит в том, чтобы поднять "/house/flat/:flatId" до того же уровня, что и "/house".

<Switch>
  <Route exact path = "/" component = {Home} />
  <Route path = "/account" component = {Account} />
  <Route path = "/house/flat/:flatId" render = {() => <div>Each Flat details</div>}/>
  <Route path = "/house" component = {House} />
</Switch>

но я хочу передать реквизиты из компонента House в Flat Component, и спасибо за это! очень близко к решениям

Efrain Sanjay Adhikary 10.11.2018 07:04

Вам нужно будет хранить и извлекать данные от общего предка. См. Поднятие состояния вверх для получения дополнительной информации @EfrainSanjayAdhikary

Arman Charan 10.11.2018 07:07

они оба находятся внутри app.js! не слишком ли тяжело загружать все в app.js и делиться ими в Flat и House?

Efrain Sanjay Adhikary 10.11.2018 07:12

Нет, накладные расходы незначительны. Вы также можете вложить подмаршруты "/" и "/flat/:flatId" в "/house", если хотите управлять state более чистым образом. Основные шаги / логика в любом случае одинаковы @EfrainSanjayAdhikary

Arman Charan 10.11.2018 07:26
Ответ принят как подходящий

Вы можете добиться этого разными способами

  1. определять маршруты в родительском компоненте, я думаю, что это лучший вариант.
<Switch>
  <Route path = "/account" component = {Account} />
  <Route path = "/house/flat/:flatId" component = {FlatComponent}/>
  <Route path = "/house" component = {House} />
  <Route path = "/" component = {Home} />
</Switch>

Примечание: вместо использования exact упорядочивайте маршруты на основе приоритета, что приведет к перенаправлению маршрута на следующий совпадающий маршрут, если во введенном маршруте есть опечатка.

  1. Вы можете сделать House отдельным компонентом маршрута и вложить маршруты внутри этого компонента.
// Routes
<Switch>
  <Route path = "/account" component = {Account} />
  <Route path = "/house" component = {House} />
  <Route path = "/" component = {Home} />
</Switch>

// House component
class House extends React. Components {
  render() {
    return (
      <Switch>
        <Route path = "/house/flat/:flatId" render = {() => <div>Each Flat details</div>} />}/>
        <Route path = "/house" component = {HouseGridComponent} />
      </Switch>
    )
  }
}
  1. вы можете проверить, есть ли в маршруте flatId, и скрыть элементы, в вашем компоненте House вы можете проверить this.props.match.params.flatId, если flatId установлен, вы можете скрыть этот компонент House.
// House Component

class House extends React. Components {
  render() {
    return (
      <div>
        {
          !this.props.match.params.flatId?
            <h1>House Component</h1>:
            null
        } 

        <Route path = {`${this.props.match.url}/flat/:flatId`} render = {() => <div>Each Flat details</div>} />
      </div>
    )
  }
}

хорошо, я понял то, что вы пытаетесь передать! но когда компонент дома визуализируется, я получаю все данные, и когда пользователь щелкает любую сетку (дом), данные этого дома должны быть переданы в плоский компонент, вы понимаете мой сценарий?

Efrain Sanjay Adhikary 10.11.2018 07:17

поэтому я не могу получить данные из родительского компонента! и мне нужно передать реквизит в квартиру из дома

Efrain Sanjay Adhikary 10.11.2018 07:18

Вы можете использовать второй вариант для этого

Hafeez Hamza 10.11.2018 07:21

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

Efrain Sanjay Adhikary 10.11.2018 07:27

Попробуйте новый второй вариант, который был бы намного лучше, тоже лучшая практика, я забыл добавить это раньше

Hafeez Hamza 10.11.2018 07:44

Я думаю, что в соответствии с документацией по реактивному маршрутизатору, всякий раз, когда вы хотите использовать match в компоненте Route, вам следует использовать match.path, а если вы хотите использовать его в компоненте Link, используйте match.url. Это потому, что match.path предоставит вам путь, например /:paramId/..., а match.url предоставит вам полный URL-адрес, например localhost:3000/some-id.

aditya81070 05.06.2019 18:11

Спасибо, спасибо, спасибо, спасибо, спасибо, спасибо, спасибо, спасибо, спасибо, спасибо, спасибо, спасибо <3 <3 <3: D

J Whitty 10.02.2021 22:55

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