简单、好懂的Svelte实现原理

本文深入浅出地介绍了Svelte的实现原理,通过分析Demo1和有状态的Demo,阐述了SvelteComponent的创建过程,以及如何根据组件状态进行编译优化。在编译过程中,Svelte会生成高效的JavaScript代码,包括create_fragment、mount和destroy方法,以及如何处理状态变化导致的组件更新。通过对SvelteComponent的初始化和状态变更的讨论,揭示了Svelte高效且简洁的底层机制。
摘要由CSDN通过智能技术生成

Svelte问世很久了,一直想写一篇好懂的原理分析文章,拖了这么久终于写了。

Demo1

首先来看编译时,考虑如下App组件代码:

<h1>{count}</h1>

<script>
  let count = 0;
</script>

这段代码经由编译器编译后产生如下代码,包括三部分:

  • create_fragment方法
  • count的声明语句
  • class App的声明语句
// 省略部分代码…
function create_fragment(ctx) {
  let h1;

  return {
    c() {
      h1 = element("h1");
      h1.textContent = `${count}`;
    },
    m(target, anchor) {
      insert(target, h1, anchor);
    },
    d(detaching) {
      if (detaching) detach(h1);
    }
  };
}

let count = 0;

class App extends SvelteComponent {
  constructor(options) {
    super();
    init(this, options, null, create_fragment, safe_not_equal, {});
  }
}

export default App;

create_fragment

首先来看create_fragment方法,他是编译器根据AppUI编译而成,提供该组件与浏览器交互的方法,在上述编译结果中,包含3个方法:

  • c,代表create,用于根据模版内容,创建对应DOM Element。例子中创建H1对应DOM Element
h1 = element("h1");
h1.textContent = `${count}`;
  • m,代表mount,用于将c创建的DOM Element插入页面,完成组件首次渲染。例子中会将H1插入页面:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值