从零实现一个 Mini Vue
Last updated
Last updated
const counter = {
count: 1,
};
observe(counter);const incBtn = $('#inc');
incBtn.addEventListener('click', () => {
counter.count++;
});const counterComponent = {
render(state) {
return h('h1', {}, String(state.count));
},
};autorun(function () {
// counter.count 改变了
});const node = counterComponent.render(counter);
mount(node, counterContainer);const newNode = counterComponent.render(counter);
patch(oldNode, newNode);let oldNode = null;
autorun(function () {
if (oldNode) {
const newNode = counterComponent.render(counter);
patch(oldNode, newNode);
oldNode = newNode;
} else {
oldNode = counterComponent.render(counter);
mount(oldNode, counterContainer);
}
});