Meteor, React-Router, react-komposer — параметр передачи

Как получить параметр запроса в контейнере, используя react-router и react-kompose:

Я связываю как это, но это не работает:

маршруты.js

Meteor.startup(() => {
      render(
        <Router history={ browserHistory }>
          <Route path="/" component={ App }>

            <IndexRoute name="index" component={ Index } onEnter={ requireAuth } />
            <Route name="documents" path="/documents" component={ Documents } onEnter={ requireAuth } />

            <Route name="list-projects" path="/list-projects" component={ Projects } onEnter={ requireAuth } />
            <Route name="add-project" path="/add-project" component={ AddProjectPage } onEnter={ requireAuth } />
            <Route name="project-detail" path="/project/:projectId" component={ProjectDetailPage} onEnter={ requireAuth } />


            <Route name="login" path="/login" component={ Login } />
            <Route name="recover-password" path="/recover-password" component={ RecoverPassword } />
            <Route name="reset-password" path="/reset-password/:token" component={ ResetPassword } />
            <Route name="signup" path="/signup" component={ Signup } />
            <Route path="*" component={ NotFound } />

          </Route>
        </Router>,
        document.getElementById('react-root')
      );
    });

container1.js

import { composeWithTracker } from 'react-komposer';
import { Projects } from '../../api/projects/projects.js';
import { ProjectDetail } from '../components/project-detail.js';
import { Loading } from '../components/loading.js';
import { Meteor } from 'meteor/meteor';
const composer = (params, onData) => {
  const subscription = Meteor.subscribe('projects');
  if (subscription.ready()) {
   const project = Projects.find({_id:params._id}).fetch();
    onData(null, { project});
  }
};
export default composeWithTracker(composer, Loading)(ProjectDetail);

1 ответ

  1. Вы, вероятно, поняли это к настоящему времени, но вы можете получить параметры внутри реквизита контейнера, как так, используя Ваш пример только немного изменен:

    const composer = (props, onData) => {
    
      const subscription = Meteor.subscribe('projects');
      if (subscription.ready()) {
       const project = Projects.find({_id:props.params.projectId}).fetch();
        onData(null, { project});
      }
    };
    export default composeWithTracker(composer, Loading)(ProjectDetail);
    

    React Router передаст все свои дочерние компоненты. propsявляется объектом, поэтому вы можете получить доступ к парам, просто получив значение .props.params Вы можете получить доступ ко многим другим вещам внутри контейнера в зависимости от ваших потребностей.