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
| export function createRenderer(renderOptions) { const mountComponent = (n1, n2, container, anchor) => { const { data = () => { }, render } = n2.type;
const state = reactive(data());
const instance = { state, vnode: n2, subTree: null, isMounted: false, update: null };
const componentUpdateFn = () => { if (!instance.isMounted) { const subTree = render.call(state, state); patch(null, subTree, container, anchor); instance.isMounted = true; instance.subTree = subTree; } else { const subTree = render.call(state, state); patch(instance.subTree, subTree, container, anchor);
} }; const effect = new ReactiveEffect(componentUpdateFn, () => queueJob(update));
const update = (instance.update = () => { effect.run(); }); update(); }; }
|