3 回答
TA贡献1828条经验 获得超3个赞
将children
提供给Conditional
一个function
。要将孩子渲染为函数(渲染道具),您应该像这样执行它
shouldRender() ? props.children() : null
TA贡献1757条经验 获得超8个赞
children
是一个函数,你只需要调用children
.
一个例子:https : //codesandbox.io/s/focused-cloud-sql0d
编辑:忘了再提一件事——在你的“shouldRender”函数中,你指定了路径但你从不使用它,因为它在你的道具中,你可以删除它。
TA贡献1793条经验 获得超6个赞
我认为问题在于您的enhancedSections.map实际上并没有返回任何东西。
return (
<Grid container>
{enhancedSections.map((section, index) => (
<Conditional // this is line 182
path={section.conditional ? section.conditional.param_name : null }
section={section}
>
{() => {
if ( // these series of if-else statements renders perfectly without the <Conditional/> wrapper
section.style == "single_select" &&
section.section_display_name == selectedSection
) {
return (
<SingleSelect
key={section.definition.display_name}
displayName={section.definition.display_name}
description={
section.definition.description
? section.definition.description
: null
}
path={{ id: id, field: `${section.field}` }}
/>
);
} else if (
section.style == "boolean" &&
section.section_display_name == selectedSection
) {
return (
<Boolean
key={section.definition.display_name}
displayName={section.definition.display_name}
description={section.definition.description}
path={{ id: id, field: `${section.field}` }}
/>
);
} else if (
... // more conditional cmps here
)
}}
</Conditional>
))
}
</Grid>
);
这样,enhancedSections.map 函数将返回每个增强部分的组件,并且渲染应该成功。
在添加Conditional组件之前它工作的原因是因为每个 if-else 语句都返回一个组件,并且该组件被 map 函数使用。
添加回答
举报