如果您将其从该扩展数组映射更改为
<Test>{Array.from({length:20}, (_, index) => <h1 key={index}>test{index}</h1>)}</Test>
(我还补充key
说,因为 React 一旦开始工作就会抱怨。:-))
不工作:https ://codepen.io/anon/pen/XYeQzv?editors=1010
工作:https ://codepen.io/anon/pen/eKGoya?editors=1010
它与 TypeScript 如何转译这种传播符号有关。TypeScript 将其转换[...Array(20)].map(/*...*/)
为:
Array(5).slice().map(/*...*/)
这样做的问题是Array(20)
创建了一个长度为 20 的数组,其中没有条目。slice
复制了这一点。map
只访问数组中实际存在的条目,而不是间隙。但是[...Array(20)]
会创建一个包含 20 个条目的数组,该数组undefined
将map
访问:
const a1 = [...Array(5)];
console.log(0 in a1); // true
const a1m = a1.map((_, index) => index);
console.log(0 in a1m); // true
console.log(a1m); // 0, 1, 2, 3, 4
const a2 = Array(5).slice();
console.log(0 in a2); // false
const a2m = a2.map((_, index) => index);
console.log(0 in a2m); // false
console.log(a2m); // (gaps)
Look in the real console (the snippet console gives the impression values exist in the array when they don't).
Yury Tarabanko好心地为它找到了一个错误报告。