如何更改材质 UI 警报组件的类型?

Posted

技术标签:

【中文标题】如何更改材质 UI 警报组件的类型?【英文标题】:How can I alter the types for material UI alert component? 【发布时间】:2021-08-03 08:14:54 【问题描述】:

我对 Typescript 比较陌生,我使用 React Context 创建了一个快餐栏组件,当我尝试设置警报严重性时,我收到此错误“类型'字符串'不可分配给类型'颜色|未定义'。”我确实将类型设置为字符串,但是,我似乎无法弄清楚如何给它一种颜色。 这是我的警报组件:

const AppAlert = () => 
  const alertContext = useContext(AlertContext);

  return (
    <div>
      <Snackbar open=alertContext.snackbarOpen>
        <Alert severity=alertContext.snackbarType variant="filled">
          alertContext.snackbarMessage
        </Alert>
      </Snackbar>
    </div>
  );
;

export default AppAlert;

这是我的警报道具类型:

interface AlertProps 
  snackbarOpen: boolean;
  snackbarType: string;
  snackbarMessage: string;
  setAlert: (type: string, message: string) => void;

我希望我足够具体,因为我仍在努力理解 TS。

【问题讨论】:

查看警报组件的文档。看到严重性仅限于几个不同的字符串,'error' | 'info' | 'success' | 'warning':material-ui.com/api/alert 谢谢!我只需要将类型限制为这些字符串并让它工作。 【参考方案1】:

根据文档material-ui.com/api/alert,Material-ui 警报的严重性可以是四种类型之一'error' | 'info' | 'success' | 'warning'。您遇到的问题是因为您的Alert 组件的严重性属性已从您的alertContext.snackbarType 分配了一个undefined 值。为避免出现问题时出现错误,最好按如下方式设置默认严重性类型:

<Alert severity=alertContext?.snackbarType || 'warning' variant="filled">
    alertContext?.snackbarMessage
</Alert>

【讨论】:

【参考方案2】:

我刚刚遇到了同样的问题,并通过从@material-ui/lab/Alert 导入类型来解决它:

import React from 'react';
import Alert from '@material-ui/lab/Alert';
import type  Color  from '@material-ui/lab/Alert'

interface Props
    severity: Color,
    message: string


export const BuildReportAlert = (props: Props) => 

    const severity, message = props;

    return (
        <Alert
            variant='outlined'
            severity=severity
        >
            message
        </Alert>
    )


【讨论】:

以上是关于如何更改材质 UI 警报组件的类型?的主要内容,如果未能解决你的问题,请参考以下文章

使用对话框中的状态按钮或 Material UI 中的警报来反应内存泄漏警告

Ionic 2 警报组件属性创建在警报类型上不存在

如何在 blazor 组件中显示来自后端的自定义引导警报

如何在 swift ui 中显示两个警报,一个接着一个

如何在 React 的 Material UI 中更改警报上的图标大小

BLoC 中的逻辑应该如何触发一次性 UI 警报,例如对话框或快餐栏?