mirror of https://github.com/vuejs/vue.git
				
				
				
			feat(devtools): store functional render context on vnode in development (#8586)
This commit is contained in:
		
							parent
							
								
									2686818beb
								
							
						
					
					
						commit
						4ecc21c29e
					
				| 
						 | 
				
			
			@ -105,24 +105,27 @@ export function createFunctionalComponent (
 | 
			
		|||
  const vnode = options.render.call(null, renderContext._c, renderContext)
 | 
			
		||||
 | 
			
		||||
  if (vnode instanceof VNode) {
 | 
			
		||||
    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options)
 | 
			
		||||
    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
 | 
			
		||||
  } else if (Array.isArray(vnode)) {
 | 
			
		||||
    const vnodes = normalizeChildren(vnode) || []
 | 
			
		||||
    const res = new Array(vnodes.length)
 | 
			
		||||
    for (let i = 0; i < vnodes.length; i++) {
 | 
			
		||||
      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options)
 | 
			
		||||
      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext)
 | 
			
		||||
    }
 | 
			
		||||
    return res
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function cloneAndMarkFunctionalResult (vnode, data, contextVm, options) {
 | 
			
		||||
function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
 | 
			
		||||
  // #7817 clone node before setting fnContext, otherwise if the node is reused
 | 
			
		||||
  // (e.g. it was from a cached normal slot) the fnContext causes named slots
 | 
			
		||||
  // that should not be matched to match.
 | 
			
		||||
  const clone = cloneVNode(vnode)
 | 
			
		||||
  clone.fnContext = contextVm
 | 
			
		||||
  clone.fnOptions = options
 | 
			
		||||
  if (process.env.NODE_ENV !== 'production') {
 | 
			
		||||
    ;(clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext
 | 
			
		||||
  }
 | 
			
		||||
  if (data.slot) {
 | 
			
		||||
    (clone.data || (clone.data = {})).slot = data.slot
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,6 +26,7 @@ export default class VNode {
 | 
			
		|||
  ssrContext: Object | void;
 | 
			
		||||
  fnContext: Component | void; // real context vm for functional nodes
 | 
			
		||||
  fnOptions: ?ComponentOptions; // for SSR caching
 | 
			
		||||
  devtoolsMeta: ?Object; // used to store functional render context for devtools
 | 
			
		||||
  fnScopeId: ?string; // functional scope id support
 | 
			
		||||
 | 
			
		||||
  constructor (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue