2016-09-24 8 views
1

Так что если у меня есть компонент с методом рендеринга, который вызывает this.props.children для визуализации любых детей, могу ли я передать любые реквизиты от родителя к детям его пытаться сделать?Могу ли я передать реквизиты детям через props.children React JS

Для примера рассмотрим следующее:

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> 
    ); 
    } 
} 

Что мы делаем, это делают только один из эпизодов в менеджере сцены, но, как мы видим, в компоненте менеджера сцены у меня есть «приватная переменная», называемая this._sceneManager.

Я хотел бы передать это детям, в данном случае ExampleSceneB, поскольку это то, что отображается на странице.

ответ

1

Да, все, что вам нужно сделать, это клонировать элемент с дополнительными реквизитами, которые вы хотите. как это.

componentWillMount() { 
    const childrenWithProps = React.Children.map(this.props.children, 
     (child) => React.cloneElement(child, { 
      sceneManager: this._sceneManager 
     }) 
    ); 
    this._sceneManager.registerScenes(childrenWithProps); 
} 
Смежные вопросы