ensure instance-unique keys for <transition> child nodes during pending node removal (fix #4702)

This commit is contained in:
Evan You 2017-01-16 18:00:34 -05:00
parent c66991d961
commit 85d6f115bb
2 changed files with 7 additions and 4 deletions

View File

@ -127,9 +127,13 @@ export default {
return placeholder(h, rawChild)
}
const key = child.key = child.key == null || child.isStatic
? `__v${child.tag + this._uid}__`
: child.key
// ensure a key that is unique to the vnode type and to this transition
// component instance. This key will be used to remove pending leaving nodes
// during entering.
const id = `__transition-${this._uid}-`
const key = child.key = child.key == null
? id + child.tag
: child.key.indexOf(id) === 0 ? child.key : id + child.key
const data = (child.data || (child.data = {})).transition = extractTransitionData(this)
const oldRawChild = this._vnode
const oldChild: any = getRealChild(oldRawChild)

View File

@ -103,7 +103,6 @@ export function enter (vnode: VNodeWithData, toggleDisplay: ?() => void) {
const parent = el.parentNode
const pendingNode = parent && parent._pending && parent._pending[vnode.key]
if (pendingNode &&
pendingNode.context === vnode.context &&
pendingNode.tag === vnode.tag &&
pendingNode.elm._leaveCb) {
pendingNode.elm._leaveCb()