最近在搞Vue3组件库,自告奋勇要了 input 组件,学到了一点知识,在这里作参考。

    技术细节直接抄 element-pluselement3 ,第一次做重在参与。

    假定我们要封装这个元素:

    1. <!-- 子组件 -->
    2. <input type="text" />
    3. <!-- 父组件 -->
    4. <el-input v-model='inputVal' />

    我们在父组件传递 v-model='inputVal ,在子组件的 props 里显然可以取到 props.modelValue 。(注意这里 vue3 的 v-model 技术实现变了,这里略过不提。)

    如何在 input 中渲染父组件传递的值呢,显然我们需要一个 value 属性,就是下面的结果:

    1. <input type="text" value="xxx" />

    ?? 略过有点啰嗦的点

    经过实践,在 vue3 中这样修改 input 的 value值最好

    1. <input ref='input' />

    然后在js中这些书写

    1. setup(){
    2. // 页面初始化先定义一个 key为上面ref值的变量
    3. const input = ref(null)
    4. // 等到模板渲染时候会对 input进行复制,等到 mounted 就拿到了真实值
    5. onMounted(){
    6. console.log(input.value)
    7. }
    8. }

    官方文档是这样描述的 ,这个叫模板引用,相当于在模板中定义变量。

    image.png