儿童道具的确切反应如何?
下面的示例组件将在someArray迭代时使用NPE失败,当它为null时。 Wrapper组件背后的理念是在没有数据时保护案例 - 这里我只是显示消息'工作......'但通常它可以扩展到任何东西,例如微调器或进度条。此外,在此示例中,即使我将其修复为:
{someArray && someArray.map((arrayValue) => <li>{arrayValue}</li>)}
如果someArray为null,则会在Wrapper内部进行不必要的渲染,这不是很聪明。
我认为问题是总是呈现Wrapper组件的子项,即使它可以跳过它。什么能阻止儿童作为一种功能,而不是按要求呈现内容?
const Demo = () => {
const someArray = null; // will fail with NPE
//const someArray = ['aaa', 'bbb', 'ccc']; // will render content
return(
<Wrapper isWorking={someArray === null}>
<h1>Inside</h1>
<ul>
{someArray.map((arrayValue) => <li>{arrayValue}</li>)}
</ul>
</Wrapper>
);
}
const Wrapper = ({ isWorking, children }) => {
if( isWorking ){
return <div>working...</div>
}else{
return <div>{children}</div>
}
}