Skip to content

runtime-dom ​

本节目标:理解“runtime-dom”的核心思路,并能把它用于实际开发或面试表达。

说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。

新建包runtime-dom,新建package.json
{
  "name": "@vue/runtime-dom",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "buildOptions": {
    "name": "VueRuntimeDOM",
    "formats": [
      "cjs",
      "esm-bundler",
      "global"
    ]
  }
}
dist/index.html
<body>
  <div id="app"></div>
  <script src="./runtime-dom.global.js"></script>
  <script>
    let { createRenderer, h } = VueRuntimeDOM
    // 渲染器渲染的是虚拟dom,接受一个配置,其中有patchProp方法
    let renderer = createRenderer({
      createElement(element) {
        // setData()
        return document.createElement(element);
      },
      setElementText(el, text) {
        el.innerHTML = text;
      },
      insert(el, container) {
        container.appendChild(el);
      },
      patchProp(el, key, prevValue, nextValue) {
        console.log(el, key, nextValue)
      }
    })
    render(
      h('h1', { style: {} }, [
        h('li', { key: 'a' }, 'a'),
        h('li', { key: 'b' }, 'b'),
        h('li', { key: 'c' }, 'c'),
        h('li', { key: 'd' }, 'd'),
        h('li', { key: 'e', style: { color: 'red' } }, 'e'),
        h('li', { key: 'f' }, 'f'),
        h('li', { key: 'g' }, 'g')
      ]
      ), app);
    setTimeout(() => {
      render(
        h('h1', {}, [
          h('li', { key: 'a' }, 'a'),
          h('li', { key: 'b' }, 'b'),
          h('li', { key: 'e' }, 'e'),
          h('li', { key: 'c' }, 'c'),
          h('li', { key: 'd' }, 'd'),
          h('li', { key: 'h' }, 'h'),
          h('li', { key: 'f' }, 'f'),
          h('li', { key: 'g' }, 'g')
        ]
        ), app);
    }, 1000)
  </script>
</body>

本站总访问 — 次