reactjs – 使用react-router从this.props.children访问React组件

前端之家收集整理的这篇文章主要介绍了reactjs – 使用react-router从this.props.children访问React组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个网站,其中包含以下react-router和react-router-relay设置:

main.jsx:

<Router history={browserHistory} render={applyRouterMiddleware(useRelay)}>
  <Route path="/:classroom_id" component={mainView} queries={ClassroomQueries}>
    <IndexRoute component={Start} queries={ClassroomQueries} />
    <Route path="tasks" component={TaskRoot} queries={ClassroomQueries}>
      <IndexRoute component={TaskList} queries={ClassroomQueries} />
      <Route path="task/:task_id" component={TaskView} queries={ClassroomTaskQueries} />
      <Route path="task/:task_id/edit" component={TaskEdit} queries={ClassroomTaskQueries} />
    </Route>
  </Route>
</Router>

该网站是一个虚拟教室,教师可以在其中为学生创建任务.这些任务也可以编辑.

用户在TaskEdit中编辑任务并点击“保存”时,将应用更改并将用户重定向到TaskList.现在我想给用户一个“你的更改已被保存!”编辑任务后的消息.

我已经为此目的创建了一个bootstrap alert组件(< Alert>).

为了便于说明,假设我有以下mainView组件(检查上面的Router):

mainView.js:

render() {
  <div>
    <Menu />
    <Row>
      <Col md={3}>
        <Sidebar />
      </Col>
      <Col md={9}>
        {this.props.children}  <-- Start,TaskRoot,etc go here
      </Col>
    </Row>
    <Alert someProps={...} />  <-- Popup component
  </div>
}

通常,我会在活动组件之外创建此警报组件,并传递某种功能,将警报显示为活动组件的prop.与here所示类似.

但是,这仅适用于特定组件.但是因为< Alert>位于我页面的根级(连同菜单栏,侧栏和其他所有页面上都是静态的东西),由于{this.props.children},我无法将其作为道具传递.

请允许我说明我想再次实现的流程:

>用户将编辑内容保存到< TaskEdit>中的任务.
>保存编辑并将用户带回< TaskList>.
>之后,我想< Alert>触发,并显示一条消息.

我已经看到其他解决方案建议您可以克隆React元素的所有子元素并应用打开警报所需的prop,但由于react-router的性质,这似乎并不真正起作用.

我怎样才能完成上述任务?组件是否可以全局访问?请注意,我不想重新创建< Alert>在每个组件中.整个DOM只有一个这样的组件.

简单回答:

将Alert组件放在顶级视图中,然后使用一些pubsub或事件总线lib来更新它.

在Alert组件onComponentDidMount函数中,您将侦听特定事件和数据并相应地更新其状态(可见性和消息)

在任务保存功能中,您将事件发布到事件总线.

更多预先答复:

使用React flux library https://facebook.github.io/flux/docs/overview.html

猜你在找的React相关文章