我使用以下选项渲染组件:
<PanelGroup>
{this.renderPanel1()}
{this.renderPanel2()}
{this.renderPanel3()}
</PanelGroup>
现在我的面板只有在available-property设置为true
时才可用,否则render()方法返回null。
我的<PanelGroup>
应该在所有元素的底部添加一个分隔符,除了最后一个元素。
我尝试用下面的代码来实现这一点,但是因为即使panel2
返回null,仍然添加了除法器,所以代码无法工作。
如何过滤掉所有返回null的面板?:)
<div>
{React.Children.map(
React.Children.toArray(props.children),
(child: React.ReactElement<PanelProps>, i) => {
return (
<div>
{React.cloneElement(child as React.ReactElement<PanelProps>, child.props)}
{/*Add divider after all elements except last*/}
{i < React.Children.count(props.children) -1 && <Divider/>}
</div>
)
}
)}
</div>
4条答案
按热度按时间5rgfhyps1#
你必须利用 * Array. filter()*:
工作示例:
ruoxqz4g2#
children不是数组,不能按数组处理(React.children除外)。
如果您尝试使用标准的Array技术过滤空值,则不会起作用!
我只是在这上面浪费了点时间。
我遇到的问题是,我把孩子当作一个数组,然后做一些ramda拒绝所有的null,它不会工作。
当我把
React.children.toArray(children)
作为“拒绝零值”过滤器的输入时,一切都很好。假设有两个孩子,其中一个为空,由以下内容生成:
在我的面板组渲染器中:
产量:
高温加热
apeeds0o3#
在尝试了其他答案后,我发现这是有效的。
fkaflof64#
代替
我试过了
toArray删除空值。