前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从头创建您自己的vue.js——第2部分(虚拟DOM基础)

从头创建您自己的vue.js——第2部分(虚拟DOM基础)

作者头像
公众号---人生代码
发布2020-09-23 14:39:48
6980
发布2020-09-23 14:39:48
举报
文章被收录于专栏:人生代码人生代码

这是“从头创建自己的vuei .js”系列文章的第二部分,在这里我将介绍如何创建响应式框架(比如vuei .js)的基本原理。在第一部分中,我描述了我们需要的部分和要遵循的路线图。如果你还没有读过,我建议你在阅读这篇文章之前先读一下。

What is a virtual DOM?

?DOM文档对象模型,一个网站的HTML结构 ?VDOM =代表结构的副本

虚拟DOM是将实际DOM表示为JavaScript格式,在这种格式中操作它比在每次有变化时操作实际DOM更容易、成本更低。

如果您不想将DOm呈现给浏览器,而是呈现给一个字符串(当涉及到服务器端呈现时很方便),那么它也很有用。

Virtual nodes

所以,虚拟DOM是由虚拟节点组成的,在我们将要编码的例子中,它看起来是这样的:

代码语言:javascript
复制
{
    tag: 'div',
    props: {
        class: 'container'
    },
    children: [
        {
            tag: 'h1',
            props: {},
            children: 'Hello World'
        },
        {
            tag: 'p',
            props: {},
            children: 'Lorem ipsum dolor sit amet.'
        }
    ]
}

上面的例子相当于这个HTML代码:

代码语言:javascript
复制
<div class="container">
    <h1>Hello World</h1>
    <p>Lorem ipsum dolor sit amet.</p>
</div>

所以一个虚拟节点的组成为:

  • An HTML tag as String
  • An Object of properties
  • A list of children than can either be:
    • Another node
    • A text (representing the content)

Virtual DOM skeleton

在我们的示例中,我们将不构建一个成熟的虚拟DOM“引擎”,但足以理解基础知识。

让我们看一下虚拟DOM的编码。我们将把所有未来的代码建立在以下几行之上。因此,创建一个包含以下内容的html文件:

代码语言:javascript
复制
<div id="app"></app>
<script>

    // Create virtual node
    function h(tag, props, children) {
        // Return the virtual node
    }

    // Mount a virtual node to the DOM
    function mount(vnode, container) {
        // Create the element
        // Set props
        // Handle children
        // Mount to the DOM
    }

    // Unmount a virtual node from the DOM
    function unmount(vnode) {
        // Unmount the virtual node
    }

    // Take 2 vnodes, compare & figure out what's the difference
    function patch(n1, n2) {
        // Case where the nodes are of the same tag
        // Case where the new vnode has string children
        // Case where the new vnode has an array of vnodes
        // Case where the nodes are of different tags
    }

    function render(message) {
        // Render a virtual node with a given message
    }

    // Create virtual nodes & render them below this line...
</script>

正如你所看到的,我们有五个不同的函数,它们都完成了创建和渲染虚拟DOM的任务:

  • h创建一个虚拟节点(但还没有将其挂载到实际的DOM)。我称它为h,因为它在vuy。js项目中也是这样叫的
  • mount将获取一个给定的虚拟节点并将其挂载到实际DOM中的一个给定容器中。对于第一个元素,这将是我们在文件最顶部创建的#app节点。
  • 卸载将从父节点删除虚拟节点
  • 到目前为止,patch是我们为VDOM编写的最大的函数。这是因为我们必须用递归的方式比较两个不同的节点并检查所有的差异(递归地对所有的子节点进行检查)。
  • render是render函数的简化版本。在我们的示例中,它使用内部给定的消息创建各种虚拟节点(稍后我们将对其进行更改,以演示我们的VDOM“引擎”的工作方式)。

What's next

在第1部分中,我们看到了构建自己的Vue所需的构建部分。在本部分中,我们了解了如何构建虚拟dom的基础知识。

在下一章中,我们将实际实现完整的虚拟DOM部分。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • What is a virtual DOM?
  • Virtual nodes
  • Virtual DOM skeleton
  • What's next
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档