reactjs - 在反应组件中将感叹号作为道具值传递
问题描述
今天我看到这行代码,我很困惑它是做什么的,我知道 list 是一个对象数组,但那是!
为了什么?它如何影响我以后处理 MyComponent 组件的方式?
<MyComponent list={data?.list!} />
解决方案
组合:
可选的链接运算符(
?.
、TypeScript 和 JavaScript),以及非断言运算符(TypeScript)(实际上它是一个非nullish
null
运算符),它告诉 TypeScript 结果值不是null
orundefined
。
该data?.list
部分获取data.list
if data
is not null
or的值undefined
,或者获取undefined
if data
is null
or的值undefined
。然后!
向 TypeScript 断言结果data?.list
不是null
或undefined
(更多下文)。
请注意,这段代码充其量只是有点混乱。使用可选链接和非空断言是没有意义的,因为使用可选链接的唯一原因是处理 base ( data
) 可能是null
或如果是则undefined
使用值undefined
(而不是查找.list
)的情况。继续断言它是非空的是没有意义的。其中一个或另一个不应该在那里。
我猜!
是因为MyComponent
不允许它的list
道具是null
or undefined
。如果是这样,代码应该只是:
<MyComponent list={data.list} />
...事先使用适当的逻辑来检查两者都不是,或者如果不是这样data
,则根本避免渲染。例如,也许:data.list
null
undefined
MyComponent
{data?.list ? <MyComponent list={data.list} /> : null}
推荐阅读
- java - Android通知振动不起作用
- angularjs - Angular ng serve 不起作用:serve 命令需要在 Angular 项目中运行,但找不到项目定义
- flutter - Flutter:在使用 Provider 构建期间调用 setState() 或 markNeedsBuild()
- node.js - 如何在 puppeteer 中使用会话 cookie 进行身份验证
- javascript - 如何循环梯度方向
- selenium - 使用 selenium 在 IE11 浏览器中检测 angularJS 元素需要很长时间。如何解决这个问题?
- wordpress - 从 wordpress 中的内容自动生成标签
- c++ - 使用 clang 编译时处理 Windows 依赖项的最佳方法?
- android - 地图标记未显示在确切位置
- svelte - 在@html 中使用 svelte css 类