ReactJS为什么我不能修改传递给组件的子节点

时间:2015-07-15 06:43:13

标签: reactjs react-jsx

我想我可以做到这一点,但我收到了这个错误:

TypeError:child.constructor.ConvenienceConstructor不是函数

我在页面中有一个组件,ala:

//此内容位于html页面中。我的组件读取了这个孩子,但我似乎无法修改它的任何部分..只需重写它。

<MyComponent prop1="somevalue">
   <div className="myclass1"> some child content that is dynamic </div>
</MyComponent>

现在,在我的组件中,因为内部子(ren)是动态的,我需要根据某些条件更改该类。但我不能。我得到了上面提到的错误。

我试过了:

var childContent = React.Children.map(this.props.children,
    function(child) {
            return React.cloneWithProps(child,
                { className: 'myNEWClass' } );
    });

我也尝试了 cloneElement ,但也无效。

不起作用。我试着直接访问孩子,ala:

 child._store.props.className // but can't seem to change it, seems immutable.

那么,我怎样才能改变这门课程呢?

感谢,

1 个答案:

答案 0 :(得分:0)

道具应该是不可变的,所以不要将className作为道具传递,而是在名为defaultClass的道具中进行父传递。在map方法中,您可以添加一个额外的prop,例如overrideClass。最后,在实际子组件的render()方法中,您需要一些逻辑来将className设置为overrideClass或defaultClass。通过这种方式,您不必改变道具。