но я впервые применяю while в jsx и для меня было неожиданностью что полученный аргумент (i) для передачи в функцию онклик оказался не тот который я ожидал. чем можно заменить такую конструкцию? я понимаю что мап лучше, но он немного не то делает. изначально i равно какому-то числу больше 1. и тут создаются кнопочки с соответствующими циферками, при нажатии на которые происходит действие согласно этого номера. но номер у всех одинаковый получился.
while (i < pages) {
listPages.push(
<a href="#" onClick={(e) => getNewPage(e, i)} > {i} </a> );
i++;
}
после чего я показываю listPages.map((item) => item) и тут уже все понятно.
так в компоненте ничего интересного. главное отрисовать эти кнопочки, но начинать не с начала,а а с определенного значения и до определенного значения
Я хз просто React.createElement() синхронный или асинхронный. Во втором случая у тебя скорее всего при ее вызове этой функции все ссылается на одну и туже переменную, потому и значение одинаковое
именно так. поэтому везде советуют сначала заполнить массив, а потом мапом сделать. но и тут не получается, в массиве все на одну так же ссылвается. остается сделать вообще массив этих значений, но одной командой я не нашел как сделать массив от определенного до определенного значения чисел, а просто заполнять массив числами через for или while и push как-то не правильно выглядит. хотя вероятно так и придется делать.
Ты можешь сохранить I через замыкание, а здесь он каждый раз будет меняться
можно просить схематичный пример как это сделать?
Конечно) while (i < pages) { listPages.push( <a href="#" onClick={(y =>(e) => getNewPage(e, y))(I)} > {i} </a> ); i++; }
спасибо. попробую. в крайнем случае сделаю просто текстом и его буду показывать.
А ну и внутри самой ссылки можно тоже через замыкание сохранить, я забыл добавить. Но вообще ты можешь заранее сгенерить массив и сразу мапить, не используя while
да, об этом я как раз и писал в ответе, но короткого решения не нащшел, а по простому через пуш создавать массив как-то некрасиво.
но тут количество может быть разное и не с начала начинаться.так пробовал. получается нормально.
const newArr = (start, end) => Array(end-start + 1).fill().map((_, index) => start + index)
спасибо. вот так составить пробовал, но не получилось в итоге. попробую Ваш вариант.
Array.from({ length: pages }, (_, i) => <div>{i}</div>) - и никаких while и map
спасибо. с fill отлично пошло. как и с applay ранее, но красивее и современнее.
с from нет лишних действий
спасибо. и так попробую завтра.
А почему не классику? new Array(10).fill(0).map()
что тут классического?)
Более понятно чем создание массива из псевдомассива
не соглашусь, подобное использование псевдомассива используется повсеместно, воспринимается как опция
Буду знать, и мб код станет проще, но не факт
подловил
Будет больше элементов чем между end и start. Последний элемент будет меньше на единицу чем end
Обсуждают сегодня