allow cond swapping of Lazy vnodes & vnodes; fix #884

- Allow conditionally swapping regular vnodes with Lazy vnodes.
- Allow Lazy "string" nodes for consistency.
This commit is contained in:
Sergey 2019-10-10 14:47:33 +03:00 committed by Jorge Bucaran
parent 3186fe180f
commit 66d1644b35
1 changed files with 7 additions and 5 deletions

View File

@ -359,8 +359,8 @@ var propsChanged = function(a, b) {
var getVNode = function(newVNode, oldVNode) {
return newVNode.type === LAZY_NODE
? ((!oldVNode || propsChanged(oldVNode.lazy, newVNode.lazy)) &&
((oldVNode = newVNode.lazy.view(newVNode.lazy)).lazy = newVNode.lazy),
? ((!oldVNode || !oldVNode.lazy || propsChanged(oldVNode.lazy, newVNode.lazy)) &&
((oldVNode = toVNode(newVNode.lazy.view(newVNode.lazy))).lazy = newVNode.lazy),
oldVNode)
: newVNode
}
@ -380,6 +380,10 @@ var createTextVNode = function(value, node) {
return createVNode(value, EMPTY_OBJ, EMPTY_ARR, node, undefined, TEXT_NODE)
}
var toVNode = function(vnode){
return typeof vnode === "object" ? vnode : createTextVNode(vnode)
}
var recycleNode = function(node) {
return node.nodeType === TEXT_NODE
? createTextVNode(node.nodeValue, node)
@ -411,9 +415,7 @@ export var h = function(name, props) {
rest.push(vdom[i])
}
} else if (vdom === false || vdom === true || vdom == null) {
} else {
children.push(typeof vdom === "object" ? vdom : createTextVNode(vdom))
}
} else children.push(toVNode(vdom))
}
props = props || EMPTY_OBJ