Реагирует на навигационную ссылку маршрутизатора на другую страницу, используя реквизиты, переданные от родительского

#javascript #reactjs #react-router #react-link

#javascript #reactjs #реагирующий маршрутизатор #реагирующая ссылка

Вопрос:

Я перерисовываю карточки с уникальными «типами», которые ссылаются на разные страницы на основе props.type, переданного ему в react.

Правильно ли я динамически создаю эти ссылки маршрутизатора?

 import React from 'react';
import {render} from 'react-dom';
import {Route, NavLink, Switch, Redirect} from 'react-router-dom';
import Answered from '../../containers/Blog/answered/answered-posts';
import './Post.css';

import RothIRA from '../../containers/Types/RothIRA';

function post(props) {

  return (
    <article className="Post" onClick={props.clicked}>

      <NavLink to={{
        pathname: '/'   props.type,
        hash: '#submit',
        search: '?quick-submit=true'
      }}>
        {props.type}
      </NavLink>

      <Switch>
        <Route path={'/'   props.type} component={RothIRA}/>
      </Switch>
    </article>

  );

}

export default post;
 

Ответ №1:

Прежде всего, бессмысленно использовать Switch тег, если в теге есть только один Route . Поскольку Switch тег отображает только тот Route , который соответствует первому, даже если в теге есть два или более совпадающих элементов Switch .

это официальный документ для Switch тега https://reactrouter.com/web/api/Switch

Второй — это RothIRA компонент. Он отображается всегда, независимо от того, какой тип маршрутизируется. Ничего страшного, если вы заставили RothIRA компонент гибко отображать содержимое в соответствии с маршрутом. Но если вы этого не сделаете, он будет отображать одно и то же при каждом маршрутизировании. Если вы это сделали, посмотрите на эти примеры.

в этом примере выполняется рендеринг другого компонента в соответствии с маршрутом

 import React from 'react';
import {render} from 'react-dom';
import {Route, NavLink, Switch, Redirect} from 'react-router-dom';
import Answered from '../../containers/Blog/answered/answered-posts';
import './Post.css';

import RothIRA1 from '../../containers/Types/RothIRA1';
import RothIRA2 from '../../containers/Types/RothIRA2';

function post(props) {

  return (
    <article className="Post" onClick={props.clicked}>

      <NavLink to={{
        pathname: '/'   props.type,
        hash: '#submit',
        search: '?quick-submit=true'
      }}>
        {props.type}
      </NavLink>

      <Switch>
        <Route path={'/1'} component={RothIRA1}/>
        <Route path={'/2'} component={RothIRA2}/>
      </Switch>
    </article>

  );

}

export default post;
 

в этом примере выполняется рендеринг RothIRA , но пусть он знает, какой тип с реквизитами

 import React from 'react';
import {render} from 'react-dom';
import {Route, NavLink, Switch, Redirect} from 'react-router-dom';
import Answered from '../../containers/Blog/answered/answered-posts';
import './Post.css';

import RothIRA from '../../containers/Types/RothIRA';

function post(props) {

  return (
    <article className="Post" onClick={props.clicked}>

      <NavLink to={{
        pathname: '/'   props.type,
        hash: '#submit',
        search: '?quick-submit=true'
      }}>
        {props.type}
      </NavLink>

      <Route path={'/'   props.type} render={() => (<RothIRA type={props.type} />)}/>
    </article>

  );

}

export default post;
 

И другие вещи выглядят хорошо для меня.

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

1. это большое спасибо! Я собираюсь попробовать это! Мне было интересно, где реализовать функцию render(), и это ответило на это и для меня.

2. Если у меня есть родительский контейнер для этого компонента «post», как мне вставить его в родительский? Будет ли if <Post /> ? При этом я получаю неопознанный маршрут.

3. @MattLaszcz <Post type={‘animal’} /> может сработать. Но я не уверен, потому что я не знаю, что является неопознанным. Это может быть Post component, props.type или что угодно. Я думаю, я скажу вам, в чем проблема, когда я знаю конкретный журнал ошибок

4. Я действительно понял все это на данный момент! Еще раз спасибо за помощь.