最近在搞Vue3组件库,自告奋勇要了 input 组件,学到了一点知识,在这里作参考。
技术细节直接抄 element-plus 和 element3 ,第一次做重在参与。
假定我们要封装这个元素:
<!-- 子组件 --><input type="text" /><!-- 父组件 --><el-input v-model='inputVal' />
我们在父组件传递 v-model='inputVal ,在子组件的 props 里显然可以取到 props.modelValue 。(注意这里 vue3 的 v-model 技术实现变了,这里略过不提。)
如何在 input 中渲染父组件传递的值呢,显然我们需要一个 value 属性,就是下面的结果:
<input type="text" value="xxx" />
?? 略过有点啰嗦的点
经过实践,在 vue3 中这样修改 input 的 value值最好
<input ref='input' />
然后在js中这些书写
setup(){// 页面初始化先定义一个 key为上面ref值的变量const input = ref(null)// 等到模板渲染时候会对 input进行复制,等到 mounted 就拿到了真实值onMounted(){console.log(input.value)}}
官方文档是这样描述的 ,这个叫模板引用,相当于在模板中定义变量。

