使用virtual-dom h
和diff
方法。
鉴于:[a,b]
和[b]
生成的diff
修补程序将a
替换为b
,然后删除b
,而不是简单地删除a
。
vdom1 = h('div', [
h('div', 'div stuff'),
h('img', {src: 'keepme.png'})
])
vdom2 = h('div', [
h('img', {src: 'keepme.png'})
])
diff(vdom1, vdom2)
结果:
1 VNODE DIV ... IMG (replace DIV with IMG)
3 REMOVE IMG
需要做些什么来对齐"对齐" img
元素,因此不会将其删除并重新添加回来?
答案 0 :(得分:1)
将virtual-dom属性key
添加为元素属性可以解决这个问题。
如果你用h呼叫h(' div',{key:someKey}),它会设置一个键 返回VNode。这个键不是普通的DOM属性,而是一个 virtual-dom优化提示。
它基本上告诉virtual-dom重新排序DOM节点而不是 改变它们。
vdom1 = h('div', [
h('div', 'div stuff'),
h('img', {src: 'keepme.png', key: 1})
])
vdom2 = h('div', [
h('img', {src: 'keepme.png', key: 1})
])
diff(vdom1, vdom2)
结果:
1 REMOVE DIV
(Chris Vickery的积分转为solution。)