当前位置: 首页 > news >正文

vue源码分析(五)——vue render 函数的使用

文章目录

  • 前言
  • 一、render函数
    • 1、render函数是什么?
  • 二、render 源码分析
    • 1.执行initRender方法
    • 2.vm._c 和 vm.$createElement 调用 createElement 方法详解
      • (1)区别
      • (2)代码
    • 3、原型上的_render方法
      • (1)renderProxy方法
      • (2)initProxy方法
        • ①执行initProxy的时机
        • ②initProxy的详细说明
        • ③warnNonPresent警告方法的示例(故意将message 写错为message1)
  • 总结


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、render函数

1、render函数是什么?

官网介绍:https://v2.cn.vuejs.org/v2/api/#render
简单概括就是 _render 是vue 的一个私有方法,作用是把一个实例编程虚拟Node。
在这里插入图片描述

二、render 源码分析

路径:src\core\instance\render.ts

1.执行initRender方法

在init初始化方法中执行initRender(vm)方法,也就是把vm传入, 执行initRender初始化render方法。

在这里插入图片描述

2.vm._c 和 vm.$createElement 调用 createElement 方法详解

(1)区别

区别:
vm._c:被编译生成的render函数 所使用的方法。
vm.$createElement:给手写render函数提供一个创建vnode的方法。

在这里插入图片描述

(2)代码

通过render函数将数据渲染到视图上

import Vue from 'vue'var app = new Vue({el: '#app',render(h) {return h('div', {attrs: {id: 'app1'}}, this.message)},data() {return {message: '我是一个双向绑定的数据'}}
})

在这里插入图片描述

3、原型上的_render方法

(1)renderProxy方法

renderProxy:就是在init.ts初始化的时候判断,是生产环境的时候将vm复制给renderProxy。
在这里插入图片描述

(2)initProxy方法

initProxy:就是在init.ts初始化的时候判断,是开发环境的时候执行的方法。
路径: src\core\instance\proxy.ts

①执行initProxy的时机

在这里插入图片描述

②initProxy的详细说明

在这里插入图片描述

③warnNonPresent警告方法的示例(故意将message 写错为message1)

其实有很多这样的方法,这边挑一个常见的说明一下

// main.js vue2项目中
import Vue from 'vue'var app = new Vue({el: '#app',data() {return {message: '我是一个双向绑定的数据'}}
})// index.html
<body><div id="app">{{message1}}</div></body>

在这里插入图片描述


总结

对vue 中 render 函数的简单说明

http://www.lryc.cn/news/210428.html

相关文章:

  • Maven第三章:IDEA集成与常见问题
  • 数据结构—线性实习题目(二)5迷宫问题(栈)
  • Nginx 的配置文件(负载均衡,反向代理)
  • 项目管理49个过程定义与作用、五大过程组
  • MySQL篇---第六篇
  • QA新人入职任务
  • 更新电脑显卡驱动的操作方法有哪些?
  • [Docker]三.Docker 部署nginx,以及映射端口,挂载数据卷
  • 【0基础学Java第三课】-- 运算符
  • unocss和tailwindcss css原子引擎
  • HIT_OS_LAB1 调试分析 Linux 0.00 引导程序
  • C语言每日一题(18)数组匹配
  • redroid11 集成 nvidia gpu hals
  • 在 Visual Studio 中远程调试 C++ 项目
  • AAOS CarMediaService 问题分析
  • 06-Flask-蓝图的使用
  • 【LeetCode力扣】189 53 轮转数组 | 最大子数组和
  • Go学习第十七章——Gin中间件与路由
  • 真实感渲染的非正式调研与近期热门研究分享
  • matlab中字符串转换为数字(str2double函数)
  • 基于java的ssm框架农夫果园管理系统设计与实现
  • ctf md5爆破
  • 不同碳化硅晶体面带来的可能性
  • Kafka集群
  • 国腾GM8775C完全替代CS5518 MIPIDSI转2 PORT LVDS
  • 搜索与图论:匈牙利算法
  • 明星艺人类的百度百科怎么创建 ?
  • 类EMD的“信号分解方法”及MATLAB实现(第八篇)——离散小波变换DWT(小波分解)
  • python随手小练10(南农作业题)
  • How to install mongodb-7.0 as systemd service with podman