reactjs - 打字稿和反应 - 为什么要仔细检查道具?
问题描述
我有一个带有以下道具的组件:
interface IChatContainerProps {
...
onCollapse: Function | null;
...
}
现在,当我编写如下渲染方法时:
<div className="header__pull-right">
{
props.onCollapse !== null
&& (
<button
className="close-chat-button"
type="button"
onClick={() => props.onCollapse()}
/>
)
}
</div>
它说:
TS2721: Cannot invoke an object which is possibly 'null'
所以我必须解构道具:
const {onCollapse} = props;
return (
<div className="header__pull-right">
{
onCollapse
&& (
<button
className="close-chat-button"
type="button"
onClick={() => onCollapse()}
/>
)
}
</div>
)
这是为什么?为什么 TS 不会props.onCollapse
自动计算?
解决方案
在使用之前尝试检查函数是否不为空:
return (
<div className="header__pull-right">
{
this.props.onCollapse !== null ?
<button
className="close-chat-button"
type="button"
onClick={() => this.props.onCollapse()}
/>
: null
}
</div>
)
发生这种情况是因为您的道具 onCollapse 可以为 null 或函数。如果为空,则无法成功执行代码,因此需要手动注意 onCollapse 是否为空
推荐阅读
- java - 是否可以覆盖断电操作?
- elixir - Elixir 地图减少
- angular - ngx-leaflet:如何添加自定义控件?
- mongodb - 仅当外部字段在 mongoDB 中不为空时查找
- java - Java - 使用数组实现堆栈数据结构
- asp.net - Asp.NET MVC 5/WebApi - Angular 6 路由问题
- android-asynctask - AsyncTask 似乎冻结了多个同时请求
- c - 如何理解背靠背运营商的行为?
- amazon-web-services - 将 EBS 卷创建限制在阈值以上的 IAM 策略
- node.js - 为什么 MongooseJS 不推送到数组?