reactjs - && 逻辑运算符 jsx 和打字稿出错
问题描述
我对打字稿很陌生,我想知道为什么会失败
import {CircularProgress} from 'components/shared/material'
import React from 'react'
import loadingStyles from './styles'
const Loading = ({active}: {active: boolean}) => {
const classes = loadingStyles({active, fadeSpeed: 1})
return (
active && (
<div className={classes.overlay}>
<CircularProgress />
</div>
)
)
}
export default Loading
当我尝试在另一个组件中使用它时,我收到以下消息:
Loading' 不能用作 JSX 组件。它的返回类型 'false | Element' 不是有效的 JSX 元素。类型 'false' 不可分配给类型 'Element | 无效的'。
这很奇怪,因为这将与常规 js 一起使用,并且在 typescript 中只有在我使用像这样的三元语句时才有效:
return active ? (
<div className={classes.overlay}>
<CircularProgress />
</div>
) : null
解决方案
如果您真的想使用速记 - 您可以这样做。<></> 的使用允许多行(在这种情况下是可选的)并确保函数返回单个元素。将您的条件代码包装在 {} 周围将确保您可以在其中添加任意数量的 && 检查来呈现您的组件。
return (
<>
{active && (
<div className={classes.overlay}>
<CircularProgress />
</div>
)}
</>
);
推荐阅读
- python - Python多处理代码比单线程运行慢
- excel - 为什么VBA双击突然停止工作?
- javascript - 无法在电子应用程序中使用 worker_threads
- elasticsearch - 如何在 Kubernetes 中使用弹性搜索节点附加存储卷?
- json - 使用列表映射解析 JSON
- php - 检查重复并仅在表中插入唯一项目,但这仅适用于第一项
- swift - 冒号(:) 和 eqaul 到运算符(==)之间的区别 - 通用 Where 子句:我希望 Array 有条件地符合协议
- javascript - 尝试使用javascript函数在用户单击php时在特定时间运行mysql查询
- javascript - 使用 Lodash _.get 返回多个元素?
- reactjs - 升级到 mobx-react@6.0.0 会导致死循环