reactjs - 懒惰渲染孩子
问题描述
看看这个简单的例子:
const List = function({ loading, entity }) {
return (
<Layout loading={loading}>
<span>Name: {entity.name}</span>
</Layout>
);
};
Layout
children
组件仅在loading
is时呈现false
。但这里的问题是立即React
解决Layout
孩子。因为entity
is null
(while loading=true
) 我得到它无法读取name
的错误null
。有没有一种简单的方法来避免这个错误,因为它span
总是在entity
不是时呈现null
?
目前我知道3个选项:
- 将其
span
移至stateless function
接收entity
为prop
- 将整个包裹进去然后支撑
children
在里面Layout
function
function children
Layout
- 只需使用
{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>
虽然它仍然不完美。
推荐阅读
- .net - Microsoft Graph API 查询因提供的筛选器而失败
- r - 如何在 Spark 管道中引用特定的 DataFrame?
- jquery - JQuery网格过滤器菜单消失在模态后面
- robotframework - 尝试从自定义库访问关键字时,显示错误 InvalidArgumentException
- angular - 有没有办法从离子蓝牙模块正确读取原始数据?
- jupyter-notebook - 如何安装带有 python 和 js 组件的 nbextension 作为 labextension
- git - Atlassian Bitbucket - ssh - git pull 工作,git push 失败
- android - kotilin:尝试在空对象引用上调用虚拟方法“java.lang.String android.content.Intent.getStringExtra(java.lang.String)”
- python-3.x - 以 3 长度打印所有可能的二进制文件
- cypress - 如何使用 cypress.io 上传 PDF 文件