Vuejs2 避免直接改变道具(渲染函数)

Vuejs2 避免直接改变道具(渲染函数),vuejs2,vue-render-function,Vuejs2,Vue Render Function,只是尝试使用render函数创建组件,但我得到了一个奇怪的警告: 以下组成部分: import Vue, { CreateElement, VNode } from 'vue' export default Vue.extend({ name: 'p-form-input', props: { type: String, name: String, value: { type: [ String, Number ] }, place

只是尝试使用render函数创建组件,但我得到了一个奇怪的警告:

以下组成部分:

import Vue, { CreateElement, VNode } from 'vue'

export default Vue.extend({
  name: 'p-form-input',
  props: {
    type: String,
    name: String,
    value: {
      type: [ String, Number ]
    },
    placeholder: String,
    disabled: Boolean
  },
  data() {
    return {
      localValue: ''
    }
  },
  watch: {
    value(value) {
      this.localValue = value
    }
  },
  mounted() {
    this.localValue = this.$props.value
  },
  methods: {
    onInput(e: any) {
      this.localValue = e.target.value
      this.$emit('input', this.localValue)
    },
    onChange(e: any) {
      this.localValue = e.target.value
      this.$emit('change', this.localValue)
    }
  },
  render(h: CreateElement): VNode {
    return h('input', {
      class: 'form-control',
      domProps: {
        disabled: this.$props.disabled,
        type: this.$props.type,
        name: this.$props.name,
        placeholder: this.$props.placeholder,
        value: this.localValue
      },
      on: {
        input: this.onInput,
        change: this.onChange
      }
    })
  }
})
组件上的
v-model=“inputValue”
确实会触发
inputValue的输入/更改,但我收到了警告

使用vue 2.6.11

编辑:

不要介意ts忽略,它抱怨没有找到适合它的类型,所以这更具装饰性

<template>
  <div id="app">
    <p-form-input type="text" name="some_input" v-model="inputValue" /> {{ inputValue }}
  </div>
</template>

<script lang="ts">
import Vue from 'vue'
// @ts-ignore
import PFormInput from 'vue-components/esm/components/form-input'

export default Vue.extend({
  name: 'App',
  components: {
    PFormInput,
  },
  data() {
    return {
      inputValue: 'fdsdsfdsf'
    }
  }
});
</script>

{{inputValue}}
从“Vue”导入Vue
//@ts忽略
从“vue组件/esm/components/form input”导入PFormInput
导出默认Vue.extend({
名称:“应用程序”,
组成部分:{
PFORIMPUT,
},
数据(){
返回{
inputValue:'fdsdsfdsf'
}
}
});
您有一个名为“value”的道具,然后在方法中使用一个名为“value”的变量:

    onInput(e: any) {
      const value = e.target.value

      this.localValue = value

      this.$emit('input', value)
    },
不要重复使用名称“value”。事实上,您甚至不需要该变量:

    onInput(e: any) {
      this.localValue = e.target.value
      this.$emit('input', this.localValue)
    },
onChange也是这样:

    onChange(e: any) {
      this.localValue = e.target.value
      this.$emit('change', this.localValue)
    }

我在发布的代码中没有看到任何其他内容。您可以将代码发布到您有PFormInput的位置吗?您发布的错误引用了PFormInput,但我在OP中没有看到PFormInput。您可以添加引用PFormInput的代码吗?我发布的代码是PFormInput组件(正如您可以看到的name属性)!
name:'p-form-input'
抱歉,更清楚地说,我希望看到实际使用PFormInput的代码(即您所在的位置),再加上一点代码,我就可以重现这个问题,这将非常有帮助。