未在实例上定义,但在渲染期间引用,但可以按我的意愿工作

Posted

技术标签:

【中文标题】未在实例上定义,但在渲染期间引用,但可以按我的意愿工作【英文标题】:is not defined on the instance but referenced during render but works as i want 【发布时间】:2021-09-16 02:37:59 【问题描述】:

现在我正在学习 vuejs,但遇到了一些问题, 我希望有人可以帮助我。

我有 index.html 和 app.js,当我在控制台中的浏览器中运行时,它会打印:

vue.js:634 [Vue 警告]:属性或方法“count”未在实例上定义,但在渲染期间被引用。通过初始化该属性,确保此属性是反应性的,无论是在数据选项中,还是对于基于类的组件。请参阅:https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties。

但问题是,为什么当我点击按钮时该功能仍然有效?

这是我的完整代码:

Vue.component('click-counter', 
  template: '<button @click="count++"> count </button>',
  data() 
    return 
      count: 0
    
  
)

Vue.component('click-counter-using-defined-template', 
  template: '#click-counter-template',
  data() 
    return 
      count: 0
    
  
)

new Vue(
  el: '#app'
)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Learning</title>
</head>
<body>
  <div id="app">
    <h1>learning component</h1>
    <!-- basic component -->
    <click-counter></click-counter>

    <!-- component template -->
    <!-- Remember! Component template must contain exactly one root element. -->
    <click-counter-using-defined-template></click-counter-using-defined-template>
    <script type="text/x-template" id="click-counter-template">
      <div style="border: 1px dashed orange;">
        <p>we re counter</p>
        <button @click="count++"> count </button>
      </div>
    </script>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <script src="./app.js"></script>
</body>
</html>

【问题讨论】:

【参考方案1】:

在您的代码中,“text/x-template”实际上位于 vue 实例所附加到的 div 中。 Vue 文档指出,这种方式的模板定义需要在附加的 DOM 元素之外,通过将模板代码移到附加的 div 之外,警告就会消失。

https://vuejs.org/v2/guide/components-edge-cases.html#X-Templates

您的 x-template 需要在 Vue 所附加的 DOM 元素之外定义。

在您的代码中,Vue 在附加的 div 中遇到了“count”,但实际上并未在根实例中定义“count”。警告很可能源于此。

【讨论】:

以上是关于未在实例上定义,但在渲染期间引用,但可以按我的意愿工作的主要内容,如果未能解决你的问题,请参考以下文章

属性或方法“sendResetMail”未在实例上定义,但在渲染期间引用

未在实例上定义但在渲染期间引用的属性或方法 I Vuex

如何解决 Vue.js 中的“属性或方法未在实例上定义但在渲染期间引用..”?

属性或方法“回文”未在实例上定义,但在渲染期间引用

vue.js - 未在实例上定义,但在渲染期间引用

[Vue 警告]:属性或方法“stateSidebar”未在实例上定义,但在渲染期间被引用