javascript - 是否有一种简化的方法来检查数据是否呈现?
问题描述
当在第一次渲染时获取未定义的数据时,我们使用短路&&
运算符,例如data && data.doSomething
检查它是否已经渲染以便执行其他操作,我们会收到错误。
因此,如果您有 n 个取决于该数据的不同循环,这意味着您必须在循环之前检查它 n 次
示例:您可能会将该数据循环 3 次,因此您需要检查 3 次。
data && data.map
data && data.reduce
data && data.filter
如果您还有依赖于该数据的组件,这有点重复data && <Component />
我尝试将数据放在 useEffect(setData) 上并从状态中获取数据,但您仍然需要检查它。
获取状态
data = useSelector(state => state.data)
第一个循环获取所有用户
const allUser = data && data.map.(data => data.user)
第二个循环过滤用户
const allAge = allUser && allUser.filter(user => user.age > 18)
等等。
如您所见,第一个循环取决于获取数据(数据),第二个循环取决于第二个循环(allUser)。所以你必须对它进行链式检查。我知道你可以在组合地图和过滤器中得到它,但假设你需要这样做。
解决方案
您可以使用主要 React 启动器(CRA、Gatsby、Next.js)中开箱即用的可选链接。
const App = ({ data }) => {
return (
<>
{data?.map()}
{data?.reduce()}
{data?.filter()}
{!data && <LoadingComponent />}
</>
);
};
推荐阅读
- php - PHP-电子表格:第一行粗体
- ruby-on-rails - 捆绑器:在使用 gem 进行捆绑安装期间找不到带有可执行捆绑包 (Gem::GemNotFoundException) 的 gem bundler (>= 0.a)
- json - 删除飞镖中的重复值
- blazor - 如何使用 Blazor 更改 div 元素的类
- notifications - Exoplayer 通知图像添加
- r - 试图围绕我的 tibble 创建代码包装一个函数
- java - 为什么@Validated + @Component + 实现在spring boot中导致类型误导错误?
- android - 虽然 sdk maneger 中的 build-tools 28.0.3 已经下载,但我仍然只能在 gradle 中添加库依赖 27.1.1。我所做的?
- xbox-one - 创作:XBOX ONE (MultiAVCHD) 上无法使用的蓝光菜单
- git - 当我在本地系统中克隆我的存储库时,它只会显示一个分支