diff --git a/render/render.js b/render/render.js index 9ee2628e..023491f3 100644 --- a/render/render.js +++ b/render/render.js @@ -134,7 +134,7 @@ module.exports = function($window) { if (old.length === vnodes.length && isUnkeyed) { for (var i = 0; i < old.length; i++) { if (old[i] === vnodes[i]) continue - else if (old[i] == null) insertNode(parent, createNode(vnodes[i], hooks, ns), getNextSibling(old, i + 1, nextSibling)) + else if (old[i] == null && vnodes[i] != null) insertNode(parent, createNode(vnodes[i], hooks, ns), getNextSibling(old, i + 1, nextSibling)) else if (vnodes[i] == null) removeNodes(old, i, i + 1, vnodes) else updateNode(parent, old[i], vnodes[i], hooks, getNextSibling(old, i + 1, nextSibling), false, ns) } diff --git a/render/tests/test-updateNodes.js b/render/tests/test-updateNodes.js index 7b0f9715..524db029 100644 --- a/render/tests/test-updateNodes.js +++ b/render/tests/test-updateNodes.js @@ -104,6 +104,15 @@ o.spec("updateNodes", function() { o(updated[0].dom.nodeValue).equals("a") o(updated[0].dom).equals(root.childNodes[0]) }) + o("handles undefined to null noop", function() { + var vnodes = [null, {tag: "div"}] + var updated = [undefined, {tag: "div"}] + + render(root, vnodes) + render(root, updated) + + o(root.childNodes.length).equals(1) + }) o("reverses els w/ even count", function() { var vnodes = [{tag: "a", key: 1}, {tag: "b", key: 2}, {tag: "i", key: 3}, {tag: "s", key: 4}] var updated = [{tag: "s", key: 4}, {tag: "i", key: 3}, {tag: "b", key: 2}, {tag: "a", key: 1}]