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