ReactJS子级-筛选出空值

sle*_*mon 3 reactjs

我用以下方法渲染组件:

<PanelGroup>
    {this.renderPanel1()}
    {this.renderPanel2()}
    {this.renderPanel3()}
</PanelGroup>
Run Code Online (Sandbox Code Playgroud)

现在,只有将其可用属性设置为时,我的面板之一才可用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>
Run Code Online (Sandbox Code Playgroud)

Mos*_*ini 8

您必须利用Array.filter()

render() {
  // This filter will return only not null values
  const children = React.Children.toArray(props.children).filter(o => o);
  
  // ...your render
}
Run Code Online (Sandbox Code Playgroud)

工作示例:

const arr = [1,2,3,null,4,null,5,null];
console.log(arr.filter(o=>o));
Run Code Online (Sandbox Code Playgroud)

  • 这*不是*回答问题。他正在谈论渲染一个实际上不是 null 的组件,它是一个渲染 null 的组件,具有 `() =&gt; null` 值。所以它被认为是真实的。 (3认同)

sle*_*mon -2

代替

{i < React.Children.count(props.children) -1 && <Divider/>}
Run Code Online (Sandbox Code Playgroud)

我试过

{i < React.Children.toArray(props.children).length - 1 && <Divider/>}
Run Code Online (Sandbox Code Playgroud)

就这样了。toArray 删除空值。