Select对于onChange的prop进行警告

一、环境准备

vue + ant-design-vue

二、问题警告

Vue warn: Invalid prop: type check failed for prop "onChange". Expected Function, got Array

at <ASelect value="" onUpdate:value=fn onChange=fn,fn

html 复制代码
// parent.vue
<template>
    <CustomUserSelect />
</template>

// CustomUserSelect.vue
<template>
  <Select @change="handleChange" placeholder="请选择" allowClear>
    <SelectOption value="1">1</SelectOption>
    <SelectOption value="2">2</SelectOption>
    <SelectOption value="3">3</SelectOption>
  </Select>
</template>

三、原因分析

使用CustomUserSelect并没有传入,但是控制台会出现 <CustomUserSelect id="customSelectAnthorInfo" onBlur=fn<onBlur8> onChange=fn<onChange9> 会出现一个默认的onChangeonBlur

是UI库(Ant Design Vue)的Select组件内部绑定的事件处理函数,自动绑定到是正常现象,它们用于处理组件的内部逻辑(如当内部发生值变化时触发change事件,当失焦时触发blur事件)

简单来说Select组件会在内部处理一些原生事件(如blur、focus等),并触发自定义事件(如blur、change等)。 在Select组件的模板中,它的根元素可能监听了原生的blur事件,并调用内部方法,然后触发blur事件(自定义事件)

四、解决办法

其实就因为 CustomUserSelect 组件的根元素是 Select ,所以自动绑定了一个onChange9, 而我们又传入了一个 handleChange 方法,vue又会对onChange的方法进行汇总,导致实际传入 onChange=[handleChange, onChange9], 所以报警告,期待的是 Function, 但是传入的是 Array

html 复制代码
// CustomUserSelect 将根元素设置为div 即可消除警告
<template>
  <div>
    <Select @change="handleChange" placeholder="请选择" allowClear>
      <SelectOption value="1">1</SelectOption>
      <SelectOption value="2">2</SelectOption>
      <SelectOption value="3">3</SelectOption>
    </Select>
  </div>
</template>

// 完美解决警告
相关推荐
油丶酸萝卜别吃17 分钟前
jquery-ajax.js 说明文档
前端·javascript·jquery
windliang24 分钟前
Claude Code 源码分析(九):子 Agent 如何分叉、继续与回到父会话
前端·javascript·面试
柒和远方1 小时前
V063: TS 面试必考:interface 与 type 的四大差异,与 LLM Harness 的自动化择优
前端·javascript
半个落月1 小时前
React useRef 详解:DOM 引用、持久化值与 Worker 实例
前端·react.js
阿黎梨梨1 小时前
TypeScript 类型编程:从新手到 Harness 工程实践
前端
黄金决明子1 小时前
Vue3 + Vite 打包后打开空白?
前端
张龙6871 小时前
终端效率翻倍实战:fzf + zoxide + ripgrep + bat 组合拳,告别重复敲命令
前端
宿6741 小时前
vue3-env环境
前端·vue.js
蔬菜_1 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
汉堡大王95271 小时前
Vue 3 + TS + Element Plus 实战:如何从零搭建企业级违章记录管理 SaaS 前端
前端·javascript·vue.js