Метеор, Реагирующий маршрутизатор, реагирующий компосер — передающий параметр

#reactjs #meteor #react-router

#reactjs #метеор #реагирующий маршрутизатор

Вопрос:

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

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

routes.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:

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

 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 . Вы можете получить доступ ко многим другим вещам внутри вашего контейнера в зависимости от ваших потребностей.