vue3.0的实践记录
vue3.0正式版发布(2020-09-18) diff算法改变
在需要动态绑定的dom元素上绑定静态标记,渲染层只会比较绑定了静态标记点dom节点
1 2 3 4 5 6 7 8 9 10 11 <div id="app" >{{ msg }}</div> =========================== function render ( ) { with (this ) { return _c('div' , { attrs: { "id" : "app" } }, [_v(_s(msg))]) } }
1 2 3 4 5 6 7 8 9 10 11 12 13 <div>Hello World!</div> <div>{{msg}}</div> =============================== import { createVNode as _createVNode, toDisplayString as _toDisplayString, Fragment as _Fragment, openBlock as _openBlock, createBlock as _createBlock } from "vue" export function render (_ctx, _cache, $props, $setup, $data, $options ) { return (_openBlock(), _createBlock(_Fragment, null , [ _createVNode("div" , null , "Hello World!" ), _createVNode("div" , null , _toDisplayString(_ctx.msg), 1 ) ], 64 )) }
flag标记值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 const enum PatchFlags { TEXT = 1 , CLASS = 1 << 1 , STYLE = 1 << 2 , PROPS = 1 << 3 , FULL_PROPS = 1 << 4 , HYDRATE_EVENTS = 1 << 5 , STABLE_FRAGMENT = 1 << 6 , KEYED_FRAGMENT = 1 << 7 , UNKEYED_FRAGMENT = 1 << 8 , NEED_PATCH = 1 << 9 , DYNAMIC_SLOTS = 1 << 10 , HOISTED = -1 , BAIL = -2 }