我想知道是否有一种方法只在渲染子组件时呈现父组件,反之亦然。如果你谷歌标题你会发现相当多的条目,但没有什么对我的情况有效,因为我的元素不是undefined
或null
。想象一下父母:
class Parent extends React.Component {
constructor(props){
super(props);
}
render() {
return (
<div>
<div className="container">
{this.props.children}
</div>
</div>
);
}
}
以下孩子可能会依赖某些设置。例如,仅显示布尔值是否为真。
class Child extends React.Component {
constructor(props){
super(props);
const showChild = Settings.get(...);
this.state = {
visible:showChild
}
}
render() {
const showHello = this.state.visible ? <div>Hello</div> : "";
return (
<div>{showHello}</div>
);
}
}
在我的布局中,我支持它:
class Layout extends React.Component {
constructor(props){
super(props);
}
render() {
return (
<Parent>
<Child />
</Parent>
);
}
}
如果没有呈现Parent
元素,是否可以卸载Child
?谢谢。
更新:如果我希望此Parent
和Child
位于Layout
,Parent
的容器类具有更大的填充或边距,则用例是因为它仍然在组件树中。如果没有渲染Child,则布局中仍然存在较大的间隙,它看起来很奇怪。
答案 0 :(得分:4)
React并没有考虑到这个工作流而设计,实际上恰恰相反:数据在DOM树中明确传递,而动作向上传递。根据扩展,React必须在Parent
之前呈现Child
。
我建议您将Parent
和Child
重构为Parent
知道Child
需要哪些设置的点;在您的Child
组件参与的情况下:
<Child settings={settings} />
重申一下,这也是一种更自然的React方法,数据显式向下传递,而不是隐式加载到Child
中(虽然总有例外,例如{{{ 1}}具有connect()
)的组件。但这种方法的一个好处是现在react-redux
能够确定是否呈现其Parent
。
但是Child
的渲染呢?我们也不想抑制它吗?如果您这样做,那么您需要Parent
组件了解其Layout
组件的需求,因此:
Parent
这是<Parent settings={settings} />
的常用方法,因为渲染DOM层次结构是必须的。
答案 1 :(得分:0)
您可以通过检查是否有任何子女来有条件地在Parent
组件中呈现。
使用this.props.children.length
查看是否有正常渲染,如果没有,则返回空元素。