Vue.js 理解渲染函数-每次重新渲染时是否实际调用该函数?

Vue.js 理解渲染函数-每次重新渲染时是否实际调用该函数?,vue.js,Vue.js,我听说每次有更新时都会调用render函数,但情况似乎并非如此。我创建了这个代码笔来展示我的发现。渲染函数实际上只调用一次吗 render: function (createElement)... 每次更改都会执行render()函数,您可以在其中放置一个简单的console.log('render!') 为什么渲染结构不重新创建删除的元素?这是因为Vue使用的实际DOM的内部虚拟DOM表示。虚拟DOM不知道有一个元素被删除了,因为“删除操作”没有通过它 就虚拟DOM而言,该元素仍然存在,因

我听说每次有更新时都会调用render函数,但情况似乎并非如此。我创建了这个代码笔来展示我的发现。渲染函数实际上只调用一次吗

render: function (createElement)... 

每次更改都会执行
render()
函数,您可以在其中放置一个简单的
console.log('render!')

为什么渲染结构不重新创建删除的元素?这是因为Vue使用的实际DOM的内部虚拟DOM表示。虚拟DOM不知道有一个元素被删除了,因为“删除操作”没有通过它

就虚拟DOM而言,该元素仍然存在,因此它不会为了重新创建而接触实际DOM。这就是虚拟DOM的“差异”所在


请注意,此概念并非Vue独有,例如:

React不知道在React之外对DOM所做的更改。信息技术 根据其自身的内部表示确定更新,如果 相同的DOM节点由另一个库React get操作 困惑,无法恢复

每次更改都会执行
render()
函数,您可以在其中放置一个简单的
console.log('render!')

为什么渲染结构不重新创建删除的元素?这是因为Vue使用的实际DOM的内部虚拟DOM表示。虚拟DOM不知道有一个元素被删除了,因为“删除操作”没有通过它

就虚拟DOM而言,该元素仍然存在,因此它不会为了重新创建而接触实际DOM。这就是虚拟DOM的“差异”所在


请注意,此概念并非Vue独有,例如:

React不知道在React之外对DOM所做的更改。信息技术 根据其自身的内部表示确定更新,如果 相同的DOM节点由另一个库React get操作 困惑,无法恢复


谢谢你的回复。我使用代码笔添加了一个由Vue创建的移除按钮,并得到了相同的结果。我错过了什么?您仍然在通过DOM删除div,即使该函数位于渲染函数内。请记住,您必须采用“虚拟DOM”的方式,这意味着,例如,在渲染函数中引入一个条件,以便不渲染该div。您甚至可以在运行时检查虚拟DOM,因为它只是一个对象,请检查我的分叉代码笔:您可以看到按“在Vue内部删除”键按钮甚至不会触发重新渲染,因为Vue没有任何更改(因为您直接使用了DOM)。但是,如果您输入一些文本以触发重新渲染,您可以看到记录的虚拟DOM,其中在
children
属性中仍然有对
div
元素的引用。感谢您的响应。我使用代码笔添加了一个由Vue创建的移除按钮,并得到了相同的结果。我错过了什么?您仍然在通过DOM删除div,即使该函数位于渲染函数内。请记住,您必须采用“虚拟DOM”的方式,这意味着,例如,在渲染函数中引入一个条件,以便不渲染该div。您甚至可以在运行时检查虚拟DOM,因为它只是一个对象,请检查我的分叉代码笔:您可以看到按“在Vue内部删除”键按钮甚至不会触发重新渲染,因为Vue没有任何更改(因为您直接使用了DOM)。但是,如果您输入一些文本以触发重新渲染,您可以看到记录的虚拟DOM,其中在
children
属性中仍然有对
div
元素的引用。