diff --git a/packages/runtime-core/src/helpers/renderList.ts b/packages/runtime-core/src/helpers/renderList.ts index 12b0317bdbd..bbcbcc13044 100644 --- a/packages/runtime-core/src/helpers/renderList.ts +++ b/packages/runtime-core/src/helpers/renderList.ts @@ -1,5 +1,10 @@ import type { VNode, VNodeChild } from '../vnode' -import { isReactive, shallowReadArray, toReactive } from '@vue/reactivity' +import { + isReactive, + isShallow, + shallowReadArray, + toReactive, +} from '@vue/reactivity' import { isArray, isObject, isString } from '@vue/shared' import { warn } from '../warning' @@ -63,13 +68,15 @@ export function renderList( if (sourceIsArray || isString(source)) { const sourceIsReactiveArray = sourceIsArray && isReactive(source) + let needsWrap = false if (sourceIsReactiveArray) { + needsWrap = !isShallow(source) source = shallowReadArray(source) } ret = new Array(source.length) for (let i = 0, l = source.length; i < l; i++) { ret[i] = renderItem( - sourceIsReactiveArray ? toReactive(source[i]) : source[i], + needsWrap ? toReactive(source[i]) : source[i], i, undefined, cached && cached[i],