首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有一种干净的方法来访问对象的属性,这些属性可以是未定义的,但只有在定义时才会呈现?

有没有一种干净的方法来访问对象的属性,这些属性可以是未定义的,但只有在定义时才会呈现?
EN

Stack Overflow用户
提问于 2019-06-07 22:08:04
回答 1查看 39关注 0票数 1

我编写了一个“已加载”组件,该组件仅在加载的对象已加载时才显示其子组件。

代码语言:javascript
运行
复制
export const Loaded = (props: ILoadedProps): JSX.Element => {
    if (props.loadState === 'error') { return <p>Error</p>; }
    if (props.loadState === 'loading') { return <p>Loading...</p>; }
    return <>{props.children}</>;
};

我在一个组件中使用它,如下所示:

代码语言:javascript
运行
复制
<Loaded loadState={loadState}>
    <h3>{server!.name}</h3>
</Loaded>

我可以保证,当loadState被“加载”时,服务器将被定义,但我在运行时仍然收到"cannot read property 'name‘of undefined“错误。我认为这是在加载服务器对象之前发生的,所以它仍然尝试读取name属性,即使它不会被加载的组件呈现。我可以想出一些丑陋的方法来规避这一点,比如使用

代码语言:javascript
运行
复制
server ? server.name : ''

但是,有没有更干净的方法来解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2019-06-08 01:19:14

想象一下,如果Loaded是一个函数,你会如何调用它?

代码语言:javascript
运行
复制
Loaded(loadState, server.name)

这会给你带来和你现在一样的错误。

基本上,在评估某个条件之前,您正在尝试解析基于该条件而存在的属性。因此,server.name必须以某种方式存在于条件中。

没有单一的/神奇的解决方案,但值得注意的是,你所指的“丑陋”方式实际上是一个完整的react概念:

https://reactjs.org/docs/conditional-rendering.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56495904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档