关于 modal 组件的 emit 的提示

来源:10-6 完成删除文章功能

weixin_慕少6100463

2021-03-25

我的代码是照着你的敲的,我这里报了一个这样的警告

[Vue warn]: Extraneous non-emits event listeners (modalOnClose, modalOnConfirm) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the "emits" option.

这个问题我查了一下一般是在子组件里面派发事件时没有使用 emits 定义才会发出警告,但是我这里已经定义了,弹窗点击确认也能删除文章,只是一直在报警告

我在这个问答看到了下面一句话,就是如果改成驼峰 eslint 就会报错,如果使用 - 的方式和小写就会报上面的错误,请问老师有没有这个问题

另一点让我觉得好奇的是,upload 组件同样也使用了这样的事件命名方式不会报错

modal 组件:

<script lang="ts">
import { defineComponent } from 'vue'
import useDOMCreate from '../hooks/uesDomCreate'
export default defineComponent({
  name: 'modal',
  props: {
    title: String,
    visible: {
      type: Boolean,
      default: false
    }
  },
  emits: ['modal-on-close', 'modal-on-confirm'],
  setup(_props, context) {
    useDOMCreate('modal')
    const onClose = () => {
      context.emit('modal-on-close')
    }
    const onConfirm = () => {
      context.emit('modal-on-confirm')
    }
    return {
      onClose,
      onConfirm
    }
  }
})
</script>

PostDetail

一加上这两个自定义事件就会发出警告

<modal
  title="删除文章"
  :visible="modalIsVisible"
  @modal-on-close="modalIsVisible = false"
  @modal-on-confirm="hideAndDelete"
>
  <p>确定要删除这篇文章吗?</p>
</modal>
写回答

1回答

张轩

2021-03-25

同学你好 我编码的时候并没有出现这个警告 我又在本地使用了最新版的 vue(3.0.7),也没有出现这个错误,查询可得知这个警告有可能是 3.0.2 出现的,我录课的时候还没有这个版本,然后我找到了这个 issue:https://github.com/vuejs/vue-next/issues/2540 但是这个 issue 是说用 kebab 进行 emits 定义,父组件使用的时候使用了驼峰出现的问题,貌似和你说的不符合。你可以试试安装最新版 vue 能否解决,如果还不行,可以将源代码提供给我,我帮你本地看看。

0
1
weixin_慕少6100463
是版本的问题 我的版本是 v3.0.0 现在更新到 v3.0.8
2021-03-29
共1条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程