我可以通过props.children React JS将道具传递给孩子们

时间:2016-09-24 03:29:53

标签: javascript reactjs

因此,如果我有一个带有render方法的组件来调用this.props.children来渲染任何子节点,我可以将任何道具从父节点传递给它试图渲染的子节点吗?

例如,请考虑以下事项:

import React, { Component } from 'react';
import CoreSceneManager     from '../engine/scene_manager';

export default class SceneManager extends Component {

  constructor(props) {
    super(props);
    this._sceneManager = new CoreSceneManager();
  }

  componentWillMount() {
    this._sceneManager.registerScenes(this.props.children);
  }

  componentWillUnmount() {
    this._sceneManager.exit();
  }

  render() {
    return(
      <div>
        {this._sceneManager.getCurrentScene()}
      </div>
    );
  }
}

原样使用:

export default class SceneHandeling extends Component {

  constructor(props) {
    super(props)
  }

  render() {
    return(
      <Loop>
        <SceneManager>
          <ExampleSceneA />
          <ExampleSceneB />
        </SceneManager>
      </Loop>
    );
  }
}

我们所做的只是渲染场景管理器中的一个场景,但正如我们在场景管理器组件中看到的那样,我有一个&#34;私有变量&#34;叫this._sceneManager

我想将这个传递给孩子们,在这种情况下ExampleSceneB,因为这些是呈现给页面的。

1 个答案:

答案 0 :(得分:1)

是的,您需要做的就是使用您想要的其他道具克隆元素。像这样。

componentWillMount() {
    const childrenWithProps = React.Children.map(this.props.children,
        (child) => React.cloneElement(child, {
            sceneManager: this._sceneManager
        })
    );
    this._sceneManager.registerScenes(childrenWithProps);
}