【问题标题】:nested component in ReactReact 中的嵌套组件
【发布时间】:2015-06-29 00:35:35
【问题描述】:

我有 3 级嵌套组件。 Html 结构如下所示。 C 和 D 的渲染节点/元素需要从 Main 访问状态和自定义函数,但 C 和 D 在 B 元素内。我不确定这是否是构建组件的最佳方式。此外,如何将状态和自定义函数从 Main 传递给孙子 C 和 D 的渲染节点/元素?

<div id="Main">
    <div class="A"></div>

    <div class="B">
        <div class="C"></div>
        <div class="D"></div>
    </div>
</div>

我的尝试:

var Main = React.createClass({
    render: function(){
        return (
            <div className="Main">
                <A/>
                <B /> 
            </div>
        );
    }
});


// Putting C, D into B, but C,D both need to access state from Main. 
var B = React.createClass({
    render: function(){
        return (
            <div className="B">
                <C />
                <D />
            </div>
        );
    }
});
var C =....;
var D =....;

React.render(<Main />, document.body)

【问题讨论】:

  • 我觉得这很正常,不过别忘了追加classNames属性。
  • 如何将 Main 的 props 传递给孙子的渲染元素?

标签: javascript reactjs react-jsx


【解决方案1】:

我不确定是否有直接访问子组件状态的方法。但是你可以使用 ref

<Field ref="field1"/>

然后就可以使用了

this.refs.field1.state

你的情况:

var B = React.createClass({
    render: function(){
        return (
            <div>
                <C ref = "c1"/>
                <D ref = "d1"/>
            </div>
        );
    }
});

但不建议这样做link

【讨论】:

  • 感谢您的提示。我的问题更多是关于我应该如何以更好的方式构建我的组件父子关系以避免这种情况。由于我是新手,因此不确定我在这里使用了正确的结构。
  • 累积。对我来说,你的结构是正确的。更多参考请查看facebook.github.io/react/docs/multiple-components.html
【解决方案2】:

你可以将 Main 中的 state 作为 B 的 props 传递

    var Main = React.createClass({

        getInitialState:function(){
            return {mainState:"Main state"}
        }
        render: function(){
            return (
                <div>
                   <A/>
                    <B mainState={this.state.mainState}/> 
                </div>
            );
        }

   });


    // Putting C, D into B, but C,D both need to access state from Main.



    var B = React.createClass({
     propTypes:{mainState:React.PropTypes.string}     
     render: function(){

          return (
                <div>
                    {this.props.mainState}// The state from main is received as propps in child component
                    <C mainState={this.props.mainState}/>// Now youcan access mainState a props of C
                    <D />
                </div>
            );
        }
    });

【讨论】:

  • 谢谢你!那么如何将 Main 的自定义函数传递给 C 的渲染节点/元素?
  • 这是一种验证。但不会抛出错误。如果 propTypes 不匹配,它将提供警告。如果答案对您有帮助,也请打勾。
  • 也可以像states一样将main的自定义函数传入子组件。假设您在 main 中有一个函数“handleClick”,您可以将它作为道具传递给孩子。 并以this.props.handleClick()的方式在子组件B中使用;
  • 感谢您的回答。我想你误解了我的问题。我正在寻找一种将道具一直传递到 C 和 D 的“渲染”元素的方法,以便渲染元素可以访问 Main 的 handleClick 道具。不传递给 Main 的子组件,而是传递给“孙子”的渲染节点。比如C有render(
    )
  • 您是否尝试过 spred(...) 运算符。您可以使用 ...this.props 将所有属性传递给子组件。此外,传递道具的水平也不是最佳实践
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-19
  • 2016-06-20
  • 2017-05-30
  • 1970-01-01
相关资源
最近更新 更多