diff --git a/src/diff/children.js b/src/diff/children.js index ae46c64c5bd..78575e6de0b 100644 --- a/src/diff/children.js +++ b/src/diff/children.js @@ -146,9 +146,11 @@ export function diffChildren( newDom = childVNode._dom; if ((j = childVNode.ref) && oldVNode.ref != j) { - if (!refs) refs = []; - if (oldVNode.ref) refs.push(oldVNode.ref, null, childVNode); - refs.push(j, childVNode._component || newDom, childVNode); + if (oldVNode.ref) { + if (!refs) refs = []; + refs.push(oldVNode.ref, null, childVNode); + } + refQueue.push(j, childVNode._component || newDom, childVNode); } if (newDom != null) { @@ -249,11 +251,7 @@ export function diffChildren( // Set refs only after unmount if (refs) { for (let i = 0; i < refs.length; i++) { - if (refs[i + 1]) { - refQueue.push(refs[i], refs[++i], refs[++i]); - } else { - applyRef(refs[i], refs[++i], refs[++i]); - } + applyRef(refs[i], refs[++i], refs[++i]); } } } diff --git a/src/diff/index.js b/src/diff/index.js index a00c9d1857c..4221e7de8ad 100644 --- a/src/diff/index.js +++ b/src/diff/index.js @@ -521,7 +521,6 @@ export function unmount(vnode, parentVNode, skipRemove) { if ((r = vnode.ref)) { if (!r.current || r.current === vnode._dom) { - console.log('applying', r, 'null'); applyRef(r, null, parentVNode); } } diff --git a/test/browser/refs.test.js b/test/browser/refs.test.js index f9f4144af72..736b54b1de1 100644 --- a/test/browser/refs.test.js +++ b/test/browser/refs.test.js @@ -628,9 +628,9 @@ describe('refs', () => { rerender(); expect(calls).to.deep.equal([ 'removing ref from two', + 'adding ref to one', 'adding ref to two', - 'adding ref to three', - 'adding ref to one' + 'adding ref to three' ]); }); });