我编写了一个“已加载”组件,该组件仅在加载的对象已加载时才显示其子组件。
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}</>;
};
我在一个组件中使用它,如下所示:
<Loaded loadState={loadState}>
<h3>{server!.name}</h3>
</Loaded>
我可以保证,当loadState被“加载”时,服务器将被定义,但我在运行时仍然收到"cannot read property 'name‘of undefined“错误。我认为这是在加载服务器对象之前发生的,所以它仍然尝试读取name属性,即使它不会被加载的组件呈现。我可以想出一些丑陋的方法来规避这一点,比如使用
server ? server.name : ''
但是,有没有更干净的方法来解决这个问题呢?
发布于 2019-06-08 01:19:14
想象一下,如果Loaded
是一个函数,你会如何调用它?
Loaded(loadState, server.name)
这会给你带来和你现在一样的错误。
基本上,在评估某个条件之前,您正在尝试解析基于该条件而存在的属性。因此,server.name
必须以某种方式存在于条件中。
没有单一的/神奇的解决方案,但值得注意的是,你所指的“丑陋”方式实际上是一个完整的react概念:
https://stackoverflow.com/questions/56495904
复制相似问题