|
@@ -1,9 +1,11 @@
|
|
|
import type { VNode, VNodeChild } from '../vnode'
|
|
import type { VNode, VNodeChild } from '../vnode'
|
|
|
import {
|
|
import {
|
|
|
isReactive,
|
|
isReactive,
|
|
|
|
|
+ isReadonly,
|
|
|
isShallow,
|
|
isShallow,
|
|
|
shallowReadArray,
|
|
shallowReadArray,
|
|
|
toReactive,
|
|
toReactive,
|
|
|
|
|
+ toReadonly,
|
|
|
} from '@vue/reactivity'
|
|
} from '@vue/reactivity'
|
|
|
import { isArray, isObject, isString } from '@vue/shared'
|
|
import { isArray, isObject, isString } from '@vue/shared'
|
|
|
import { warn } from '../warning'
|
|
import { warn } from '../warning'
|
|
@@ -69,14 +71,20 @@ export function renderList(
|
|
|
if (sourceIsArray || isString(source)) {
|
|
if (sourceIsArray || isString(source)) {
|
|
|
const sourceIsReactiveArray = sourceIsArray && isReactive(source)
|
|
const sourceIsReactiveArray = sourceIsArray && isReactive(source)
|
|
|
let needsWrap = false
|
|
let needsWrap = false
|
|
|
|
|
+ let isReadonlySource = false
|
|
|
if (sourceIsReactiveArray) {
|
|
if (sourceIsReactiveArray) {
|
|
|
needsWrap = !isShallow(source)
|
|
needsWrap = !isShallow(source)
|
|
|
|
|
+ isReadonlySource = isReadonly(source)
|
|
|
source = shallowReadArray(source)
|
|
source = shallowReadArray(source)
|
|
|
}
|
|
}
|
|
|
ret = new Array(source.length)
|
|
ret = new Array(source.length)
|
|
|
for (let i = 0, l = source.length; i < l; i++) {
|
|
for (let i = 0, l = source.length; i < l; i++) {
|
|
|
ret[i] = renderItem(
|
|
ret[i] = renderItem(
|
|
|
- needsWrap ? toReactive(source[i]) : source[i],
|
|
|
|
|
|
|
+ needsWrap
|
|
|
|
|
+ ? isReadonlySource
|
|
|
|
|
+ ? toReadonly(toReactive(source[i]))
|
|
|
|
|
+ : toReactive(source[i])
|
|
|
|
|
+ : source[i],
|
|
|
i,
|
|
i,
|
|
|
undefined,
|
|
undefined,
|
|
|
cached && cached[i],
|
|
cached && cached[i],
|