创建项目 | |
| |
查看文档 | |
意义:
文档 | |
安装snabbdom | |
| |
导入snabbdom | |
| |
snabbdom 三个核心方法 | |
| |
示例二 显示hello world | |
示例三 显示div中嵌入h1标签、p标签 | |
模块 | |
Snabbdom的核心库并不能处理元素的属性、样式、事件等,可以使用模块 | |
官方提供的6个模块
| |
模块的使用步骤
| |
源码 https://github.com/SeriousLose/demos/blob/main/C/snabbdom/src/03-modules.js |
// 示例一
new Vue({router,store,render:h=>h(App)}).$mount(“#app”);
// 示例二
// 1. hello world
// init函数
// 参数: 数组,模块
// 返回值:patch函数,作用对比两个VNode的差异更新到真实DOM中
let patch = init([]);
// h函数
// 第一个参数 标签+选择器
// 第二个参数 如果是字符串,就是标签中的内容
// 返回值 VNode
let VNode = h('div#container.cls-name','hello SeriousLose');
// 获取app DOM
let app = document.querySelector("#app");
// patch函数
// 第一个参数: 如果是DOM元素,内部会把DOM元素转换成VNode
// 第二个参数: VNode
// 返回值 VNode
let oldVNode = patch(app,VNode);
// 模拟接口获取数据
setTimeout(() => {
VNode = h('div','hello SeriousLose ,你好 snabbdom');
oldVNode = patch(oldVNode,VNode);
}, 1000);
// 示例三
import { h, init } from 'snabbdom';
let patch = init([]);
let VNode = h('div#container',[
h('h1','hello 苦了'),
h('p','这是个p标签')
])
let app = document.querySelector("#app");
let oldVNode = patch(app,VNode);
setTimeout(() => {
// patch(oldVNode,null)
oldVNode = patch(oldVNode,h('!'))
}, 2000);
// 示例四
import { eventListenersModule, h, init, styleModule } from 'snabbdom';
let patch = init([
styleModule,
eventListenersModule,
])
let VNode = h('div', {
style: {
backgroundColor: 'red'
},
on: { click: eventHandler }
}, [
h('h1', 'hello 七夕')
])
function eventHandler () {
console.log('你好,SeriousLose')
}
let app = document.getElementById("app");
let oldVNode = patch(app, VNode);