antv message组件content为空时提示框不消失问题

289 阅读1分钟

问题背景

当我在使用 ant desigin vue中的message组件时,我使用如下的调用方式:

message.error({
   content: '',
   key: 'time-msg',
});

这是会出现提示框,但不能自动消失,现象如下图所示:

image.png

问题分析

进入到组件的源码分析问题,首先看到message组件在生成api的时候,会对传入的content进行校验,如下所示:

image.png

image.png

在这里我们传入的content就是

{
  content: '',
  key: 'time-msg',
}

校验为false,所以直接透传了content

到了创建vNode的时候,把这个content直接包给了标签,入下图所示:

image.png

这里创建了message的弹窗dom,在销毁的时候直接导致了vue运行时错误,所以就导致无法自动消失,如下图:

image.png

解决方案

  1. 直接修改源码,因为我们对组件库进行了二次封装,所以直接在源码层面做了容错处理

  2. 在传入参数的时候:如果传入Object,那么content字段的value不能是空字符串,需要在业务层自行处理