Split Transclusion React

时间:2017-02-06 20:22:33

标签: reactjs react-router react-jsx

我想要做的是让子组件影响其父组件的子组件。明智地说:我希望我的内容组件能够将组件注入到我预定义的标题和侧边栏元素中。

路由器:

<Router history={browserHistory}>
  <Route path="/" component={AppRoot}>
    <Route path="/home" component={Home}/>
    <Route path="/list" component={List}/>
    <Route path="/profile/:uid" component={Profile}/>
  </Route>
</Router>

App Root:

class AppRoot extends Component {
  constructor() {
    super();
    this.state = {
      header_elements: <div>HELLO???</div>
    };
    console.log(this);
  }
  render() {
    return (
        <div>
          <AppBar className="app_bar" title="Soulhart" showMenuIconButton={false}>
            <div id="nested_content">
              {this.state.header_elements}
            </div>
          </AppBar>
          <div>
            {this.props.children}
          </div>
        </div>
    );
  }
}

主页:

class Home extends Component {
  render() {
    return (<strong>Home</strong>);
  }
}

我的导航和标题是在AppRoot中定义的,但我不确定如何让Home设置AppRoot.header_elements值。有没有更简单的方法,或者我想要的是什么?

1 个答案:

答案 0 :(得分:0)

执行此操作的方法是在子组件上使用func类型的属性 -

Home.propTypes = {
    updateRoot : React.PropTypes.func
};

然后从家里打电话。 Ofcouse,你需要在路由器中连接它

 <Route path="home" component={() => <Home updateRoot={this.handleUpdateRoot}/>}/>