Я пытаюсь создать функцию рендеринга, которая отображает поле input
в Vue.
Я могу легко это сделать в обычном vue
файле с такими шаблонами:
// NormalInput.vue
<template>
<input :value="value" />
</template>
<script>
export default {
name: "NormalInput",
props: {
value: null
}
};
</script>
Обратите внимание, что вышесказанное действительно работает правильно.
Но при попытке преобразовать вышеуказанный код в функцию рендеринга со следующим кодом:
// RenderFunctionInput.js
export default {
name: "RenderFunctionInput",
props: {
value: null
},
render(createElement) {
return createElement("input", {
attrs: { value: this.value }
});
}
};
Сначала он кажется реактивным, но после редактирования RenderFunctionInput
вручную он перестает быть реактивным. Данные Vue, по-видимому, обновляются, но фактическое значение ввода отсутствует.
Вы можете посмотреть пример на https://codesandbox.io/embed/oooq7o2q16?module=%2Fsrc%2FApp.vue
Пример скриншотов:
Я создал пример двух компонентов, упомянутых выше. Они оба используют одно и то же значение данных, которое увеличивается на 1
каждые 100 мс.
![Screenshot 1](https://i.stack.imgur.com/6RjI6.png)
![Screenshot 2](https://i.stack.imgur.com/NkSBN.png)
После ввода NormalInput
он мгновенно перезаписывается данными :value="val"
. Но при вводе RenderFunctionInput
он перестает увеличиваться, отсоединяется от данных и становится неактивным.
![enter image description here](https://i.stack.imgur.com/DYh5F.gif)