【问题标题】:TypeScript: Its return type 'Element | undefined' is not a valid JSX elementTypeScript:它的返回类型'Element | undefined' 不是有效的 JSX 元素
【发布时间】:2021-08-30 06:04:07
【问题描述】:

我有这个非常简单的 ProviderAlert 组件。它根据从父级传递的道具呈现警报。

 JSX.Element | undefined => {
    return (alertIsOpen ? (
        <Alert status={alertStatus} w="80%" style={alertStyle}>
            <AlertIcon />
            {title}
            <CloseButton
                position="absolute"
                right="8px"
                top="8px"
                onClick={(): void => {
                    setAlertIsOpen(false)
                }}
            />
        </Alert>
    ) : undefined)

我尝试在父级的 return 语句中添加括号,但它不起作用。这是我如何在父组件中呈现不同警报的示例:

       {credentialsModalIsOpen && (
            <ProviderAlert
                title="Connection Successful!"
                alertStatus="success"
                alertIsOpen={true}
                setAlertIsOpen={(): void => setCredentialsModalIsOpen(false)}
            />
        )}

我还尝试在 ProviderAlert 组件中将 undefined 更改为 null。它有效,但 linter 迫使我“使用 undefined 而不是 null”。

【问题讨论】:

  • 您能否再清楚一点,您遇到的实际问题是什么?组件是否未正确呈现,或者您是否遇到其他错误。
  • IDE 和 linter 都抛出了这个问题标题的错误

标签: javascript reactjs typescript


【解决方案1】:

尝试用这个替换顶部组件。你永远不应该返回未定义的。 Undefined 是为一个值没有被赋值的时候保留的,你应该使用 null。

interface Props {
  title: string;
  alertStatus: string;
  alertIsOpen: boolean;
  setAlertIsOpen: () => void;
}

const ProviderAlert: React.FC<Props> = (props) => {
  if (!alertIsOpen) {
    return null;
  }    

  return (
    <Alert status={alertStatus} w="80%" style={alertStyle}>
      <AlertIcon />
      {title}
      <CloseButton
        position="absolute"
        right="8px"
        top="8px"
        onClick={(): void => setAlertIsOpen(false)} />
    </Alert>
  );
}

export default ProviderAlert;

【讨论】:

  • 这是同一件事,但语法不同。它并没有解决问题的根源:linter 不允许我使用 null,但如果我使用 undefined,它会崩溃。
  • 如果无法访问您的代码,就很难像我在上面发布的那样进行调试。使用 undefined 是不正确的,我不确定为什么你的 linter 会抛出 null 错误,如果你要分享这可能会阐明这个问题
猜你喜欢
  • 2022-12-22
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2019-05-29
  • 2022-08-03
  • 2019-07-21
  • 2021-12-14
相关资源
最近更新 更多