Не только с .fill()
, поскольку он просто назначит, а не вызовет функцию, которую вы ему даете.
Array(3).fill(() => {}); // [ function, function, function ]
Вы можете использовать его вместе с .map()
, однако, чтобы достичь этого.Предоставленная вами итераторная функция получит индекс в качестве второго аргумента (используя _
в качестве одноразовой переменной для первого).
Array(9).fill(0).map((_, i) => <Foo index={i} />)
Использование обоих необходимо, поскольку Array(9)
только присваивает массиву length
, оставляя индексы неназначенными.
'length' in Array(9) // true
0 in Array(9) // false
Хотя .fill()
будет работать с неназначенными индексами, .map()
специально будет их игнорировать.
Вы также можете использовать Array.from()
вместо этого, который принимает тот же итератор, что и .map()
.
Array.from(Array(9), (_, i) => <Foo index={i} />)
Кроме того, с ним 1-й аргумент не обязательно должен быть Array
:
Array.from({ length: 9 }, (_, i) => <Foo index={i} />)