对vue实现数据实时更新,render() 函数的一些理解

首先说下自己对render() 函数的理解

<div id="app">   <--app包裹的整个都属于模板,模板并不是html,只是类似于html,其实是字符串-->
         <p>{{name}}</p>
	    <p v-if="isShow">{{age}}<p>
</div>
  1. vue的模板里面有逻辑,v-if, v-for,并且存在变量, 模板里面的内容浏览器是不能够识别的,必须要通过js去转换为html,才能够显示页面。这里就用到了render()函数。
  2. render() 函数解析模板里面的内容,贴出render函数渲染 上面模板的内容
with(this) {   // this 指向当前实例,也就是this
        return _c('div', { // 创建div
            attrs: {
                "id": "app" // id是app
            }
        }, [
        _v("<--app包裹的整个都属于模板,模板并不是html,只是类似于html,其实是字符串-->\n        "), //  注释的部分被渲染为文本节点
         _c('p',
          [_v(_s(name))]), // name 就是 this.name,上面用到的name,在这里解析为data里面定义的name
           _v(" "), (isShow) ? _c('p', [_v(_s(age))]) : _e(), _c('p')]) // v-if 的逻辑判断
 }

render() 函数里面返回的是一个 vnode,也就是虚拟dom。

3.在首次渲染的过程中,调用了 updateComponent(),updateComponent() 里面调用了 updated(), 把render() 函数返回的vnode传进去了,虚拟dom挂载完毕。显示页面,updated()也是借用了 snabbdom 里面的patch(container, vnode)方法,

贴出自己理解的updateComponent()的方法

   function updated(vnode) {
        const prevVnode = vm._vnode;
        vm._vnode = vnode;
        if (!prevVnode) {  // 首次渲染
            vm.$el = vm.__patch__(vm.$el, vnode); // 挂载虚拟dom,显示视图
        } else {
            vm.$el = vm.__patch__(prevVnode, vnode); // 再次渲染,替换之前的视图
        };
    };
    function updateComponent() {
        return updated(render());  // 返回编译过后的虚拟dom
    };

4.data里面的某一个数据更新,也会在set里面再次调用
updateComponent(),也就是再次调用render(),重新编译,也就是updated(),else里面的方法,把更新的部分实时显示在视图上面。

ps:以上是本人自己在学习过程中的一些总结,有不足的地方望指出,谢谢!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vuerender 函数Vue.js 一个非常重要的概念。它是用来描述组件如何渲染的函数。在 Vue ,我们可以使用模板语法来编写组件的渲染逻辑,也可以使用 render 函数来编写。 使用 render 函数,你可以直接返回一个虚拟 DOM 对象,描述组件的结构和行为。这个函数接收一个参数,通常命名为 h(代表 createElement),它是一个用于创建 VNode(虚拟节点)的函数。 在 render 函数,你可以通过调用 h 函数来创建 VNode,然后返回一个或多个 VNode 组成的树形结构。VNode 是对真实 DOM 的一种抽象表示,它包含了节点的标签名、属性、子节点等信息。 以下是一个简单的例子,演示了如何使用 render 函数创建一个简单的 Vue 组件: ```javascript // 定义一个组件 const MyComponent = { render(h) { return h('div', { class: 'container' }, [ h('h1', {}, 'Hello, Vue!'), h('p', {}, 'This is a Vue component.') ]) } } // 使用组件 new Vue({ el: '#app', render: h => h(MyComponent) }) ``` 这个例子,我们定义了一个名为 MyComponent 的组件,在 render 函数返回了一个包含 h1 和 p 标签的 div 元素。在 new Vue 的时候,我们将 render 函数指定为 MyComponent,从而将组件渲染到具有 id 为 app 的元素。 通过使用 render 函数,你可以更灵活地控制组件的渲染逻辑,实现更高级的功能。它提供了一种编程式的方式来构建组件,而不仅仅局限于模板语法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值