Meituan-Dianping/mpvue · error

Multiple root nodes returned from render function. Render fu

Error message

Multiple root nodes returned from render function. Render function should return a single root node.

What it means

Raised in the dev branch of the instance's _render method after calling the render function: the returned vnode (or its children normalization) revealed more than one root-level node. Vue 2 component render functions must return exactly one root vnode; multiple siblings, a return of an array, or text plus an element at the top level all violate this and the extra nodes are dropped/truncated during patching.

Source

Thrown at src/core/instance/render.js:114

    try {
      vnode = render.call(vm._renderProxy, vm.$createElement)
    } catch (e) {
      handleError(e, vm, `render function`)
      // return error render result,
      // or previous vnode to prevent render error causing blank component
      /* istanbul ignore else */
      if (process.env.NODE_ENV !== 'production') {
        vnode = vm.$options.renderError
          ? vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e)
          : vm._vnode
      } else {
        vnode = vm._vnode
      }
    }
    // return empty vnode in case the render function errored out
    if (!(vnode instanceof VNode)) {
      if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {
        warn(
          'Multiple root nodes returned from render function. Render function ' +
          'should return a single root node.',
          vm
        )
      }
      vnode = createEmptyVNode()
    }
    // set parent
    vnode.parent = _parentVnode
    return vnode
  }

  // internal render helpers.
  // these are exposed on the instance prototype to reduce generated render
  // code size.
  Vue.prototype._o = markOnce
  Vue.prototype._n = toNumber
  Vue.prototype._s = toString

View on GitHub (pinned to 6c5d78ee04)

Solutions

  1. Wrap the multiple elements in a single root element (often a <div>) or use a renderless single root
  2. Return exactly one vnode from the render function — combine siblings under one createElement call
  3. Move stray top-level text/comments inside the root element
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/core/instance/render.js:114 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Meituan-Dianping/mpvue@6c5d78ee04 (2026-09-02). Data as JSON: /api/errors/32723b9bd8b273a1. Report an issue: GitHub.