看看这个简单的例子:
const List = function({ loading, entity }) {
return (
<Layout loading={loading}>
<span>Name: {entity.name}</span>
</Layout>
);
};
只有当loading
是false
时,Layout
组件才呈现其children
。但这里的问题是React
正在立即解决Layout
儿童的问题。由于entity
是null
(而loading=true
(,我得到错误,它不能读取null
的name
。有没有一种简单的方法可以避免这个错误,因为这个span
总是在entity
不是null
时渲染的?
目前我知道大约3个选项:
- 将此
span
移动到接收entity
作为prop
的stateless function
- 将
Layout
的整个children
封装在function
中,然后在Layout
中支持function children
- 只需使用
{entity && <span>Name: {entity.name}</span>}
为什么我必须使用其中一个选项,我可以使React
将这些children
视为函数,并在稍后渲染之前解析内部块吗?
我刚刚偶然发现了同样的问题。
对我起作用的是通过儿童作为一种功能:
ready: boolean;
children?: () => ReactNode,
}> = ({ ready, children }) => {
return (
<div>{
ready ?
children() :
(
<div>not ready</div>
)
}</div>
);
};
<Layout loading={loading}>
{() =>
<span>Name: {entity.name}</span>
}
</Layout>
尽管它仍然不完美。