javascript - 如何声明 useState() 初始值为 null,然后再给它一个对象值?

如图所示,我想声明一个 react 状态 Hook 到我的网页警报。起初,我希望没有显示警报。每当用户单击某个按钮时,我想显示一 strip 有消息的成功警报(如果出现问题,则发出错误警报)。我将调用 showAlert 函数来使用消息和类型作为函数参数来执行此操作。这就是为什么可以有不止一种类型的警报。因此,我创建了这个警报对象并附加了初始值为“NULL”的钩子(Hook)。但是编辑给我这个错误。

Argument of type '{ msg: any; type: any; }' is not assignable to parameter of type 'SetStateAction<null>'. Object literal may only specify known properties, and 'msg' does not exist in type '(prevState: null) => null'.ts(2345)

那么,有人能告诉我如何告诉 useState 我将来分配给它的对象参数吗?或者我应该尝试以其他方式隐藏网站警报吗?这是代码..

const [alert, setAlert] = useState(null);

const showAlert = (message, type) => {
    setAlert({
        msg: message,
        type: type,
    });

    setTimeout(() => {
        setAlert(null);
    }, 2000);

这个解决方案不适合我。

最佳答案

您需要稍微不同地声明您的 useState

const [alert, setAlert] = useState<{ msg: any; type: any } | null>(null);

另一种选择是使用 undefined

const [alert, setAlert] = useState<{ msg: any; type: any } | undefined>();

希望对您有所帮助。

https://stackoverflow.com/questions/72870629/

相关文章:

javascript - 用 JavaScript 数组中的空值替换空值/未定义值

c - 格式说明符 : %u vs %d in C

excel - 分配给数组

java - ASM 和 Javaagent 字节码检测 : ClassFormatError: S

r - 如何在 r 的基函数中使用 tidyeval

r - 混合 glm 零膨胀模型的 Bootstrap 方法

c++ - 什么时候使用 reinterpret_cast 而不违反严格的别名规则?

types - Julia 函数类型注解

python - 将用户数据列表转换为对象的最佳方法是什么?

android - 如何在 Android Jetpack Compose 的 TextField