You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue.js 2.0的render函数中实现v-model?

在Vue 2的render函数中实现v-model的方法

嘿,这个问题我之前踩过坑!确实Vue 2官方的render函数数据对象文档里没直接提到v-model的用法——因为v-model本身就是语法糖,咱们完全可以手动拆解它的逻辑来实现。

先给你理清楚本质:v-model其实就是绑定元素/组件的对应值属性 + 监听触发更新的事件,不同类型的元素对应的属性和事件会略有不同,下面给你分情况举例:

1. 原生文本输入框

对于普通文本输入框,v-model等价于绑定value属性 + 监听input事件,用render函数实现的话是这样:

render(h) {
  return h('input', {
    attrs: {
      type: 'text'
    },
    // 绑定DOM属性value到组件的data
    domProps: {
      value: this.inputValue
    },
    // 监听input事件,更新组件data
    on: {
      input: (e) => {
        this.inputValue = e.target.value
      }
    }
  })
}

2. 复选框/单选按钮这类元素

这类元素的绑定逻辑不一样,是绑定checked属性 + 监听change事件:

render(h) {
  return h('input', {
    attrs: {
      type: 'checkbox'
    },
    domProps: {
      checked: this.isChecked
    },
    on: {
      change: (e) => {
        this.isChecked = e.target.checked
      }
    }
  })
}

3. 自定义组件的v-model

如果是给自定义组件实现v-model,逻辑和原生类似,不过是绑定value prop + 监听input事件(如果你的组件自定义了v-model的prop和事件,就对应修改):

render(h) {
  return h('CustomInput', {
    // 绑定组件的value prop
    props: {
      value: this.componentValue
    },
    // 监听组件触发的input事件,更新数据
    on: {
      input: (newVal) => {
        this.componentValue = newVal
      }
    }
  })
}

总的来说,只要抓住「绑定值属性 + 监听更新事件」这个核心,就能在render函数里完美实现v-model的效果啦。

内容的提问来源于stack exchange,提问作者sof-03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:24:06