fix(v-for): handle and warn when v-for receives non-integer range number (#2247)

close #2245
This commit is contained in:
underfin
2020-10-14 04:28:24 +08:00
committed by GitHub
parent 8539c0bf32
commit 02f355eb69
4 changed files with 24 additions and 0 deletions

View File

@@ -21,6 +21,13 @@ describe('renderList', () => {
])
})
it('should warn when given a non-integer N', () => {
renderList(3.1, () => {})
expect(
`The v-for range expect an integer value but got 3.1.`
).toHaveBeenWarned()
})
it('should render properties in an object', () => {
expect(
renderList(

View File

@@ -1,5 +1,6 @@
import { VNodeChild } from '../vnode'
import { isArray, isString, isObject } from '@vue/shared'
import { warn } from '../warning'
/**
* v-for string
@@ -60,6 +61,10 @@ export function renderList(
ret[i] = renderItem(source[i], i)
}
} else if (typeof source === 'number') {
if (__DEV__ && !Number.isInteger(source)) {
warn(`The v-for range expect an integer value but got ${source}.`)
return []
}
ret = new Array(source)
for (let i = 0; i < source; i++) {
ret[i] = renderItem(i + 1, i)