React.js создание динамических маршрутов для одного и того же компонента с разными данными

#reactjs #react-router

#reactjs #реагировать-маршрутизатор

Вопрос:

У меня есть следующие маршруты.jsx:

 ReactDOM.render((
    <Router>
        <Route component={Wrapper} >
            <Route path="/" component={Home} />
            <Route path="projects" component={Projects} />
            <Route path="projects/Margam" component={Margam} />
            <Route path="projects/Margam2" component={Margam2} />
            <Route path="projects/Margam3" component={Margam3} />
        </Route>
    </Router>
), document.getElementById('app'));
  

Margam, Margam2 и Margam3 — это одни и те же компоненты, но только с разными данными. По сути, это список проектов с одинаковым дизайном, но разным содержанием.

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

Маргам:

 import React from 'react';

import Video from './video.jsx';

class Margam extends React.Component {
  render () {
    return (
        <div>
            <h2>Margam</h2>
            <Video />
        </div>
    );
  }
}

export default Margam;
  

Margam2:

 import React from 'react';

import Video from './video.jsx';

class Margam extends React.Component {
  render () {
    return (
        <div>
            <h2>Margam 2</h2>
            <Video />
        </div>
    );
  }
}

export default Margam2;
  

Ответ №1:

Вы могли бы сделать что-то вроде этого :

 <Route component={Wrapper} >
     <Route path="/" component={Home} />
     <Route path="projects/:id" component={Projects} />
</Route>
  

А затем в компоненте Projects вы можете получить доступ к идентификатору с помощью {this.props.params.id } и в зависимости от этого идентификатора вы можете показывать разные компоненты.

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

 render() {
    let Margam = (this.props.params.id == "margam") ? <Margam /> : "";
    let Margam2 = (this.props.params.id == "margam2") ? <Margam2 /> : "";

    return (
        <div>
            {Margam}
            {Margam2}
        </div>
    );
}
  

Надеюсь, это поможет.

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

1. Я попробую и дам вам знать. Спасибо