169 похожих чатов

Добрый вечер. вероятно то с чем я столкнулся стандартная ситуация,

но я впервые применяю while в jsx и для меня было неожиданностью что полученный аргумент (i) для передачи в функцию онклик оказался не тот который я ожидал. чем можно заменить такую конструкцию? я понимаю что мап лучше, но он немного не то делает. изначально i равно какому-то числу больше 1. и тут создаются кнопочки с соответствующими циферками, при нажатии на которые происходит действие согласно этого номера. но номер у всех одинаковый получился.
while (i < pages) {
listPages.push(
<a href="#" onClick={(e) => getNewPage(e, i)} > {i} </a> );
i++;
}
после чего я показываю listPages.map((item) => item) и тут уже все понятно.

24 ответов

26 просмотров
Roman-M Автор вопроса

так в компоненте ничего интересного. главное отрисовать эти кнопочки, но начинать не с начала,а а с определенного значения и до определенного значения

Roman M
так в компоненте ничего интересного. главное отрис...

Я хз просто React.createElement() синхронный или асинхронный. Во втором случая у тебя скорее всего при ее вызове этой функции все ссылается на одну и туже переменную, потому и значение одинаковое

Roman-M Автор вопроса
Alexander
Я хз просто React.createElement() синхронный или а...

именно так. поэтому везде советуют сначала заполнить массив, а потом мапом сделать. но и тут не получается, в массиве все на одну так же ссылвается. остается сделать вообще массив этих значений, но одной командой я не нашел как сделать массив от определенного до определенного значения чисел, а просто заполнять массив числами через for или while и push как-то не правильно выглядит. хотя вероятно так и придется делать.

Ты можешь сохранить I через замыкание, а здесь он каждый раз будет меняться

Roman-M Автор вопроса
Alex
Ты можешь сохранить I через замыкание, а здесь он ...

можно просить схематичный пример как это сделать?

Roman M
можно просить схематичный пример как это сделать?

Конечно) while (i < pages) { listPages.push( <a href="#" onClick={(y =>(e) => getNewPage(e, y))(I)} > {i} </a> ); i++; }

Roman-M Автор вопроса
Alex
Конечно) while (i < pages) { listPages....

спасибо. попробую. в крайнем случае сделаю просто текстом и его буду показывать.

Roman M
спасибо. попробую. в крайнем случае сделаю просто ...

А ну и внутри самой ссылки можно тоже через замыкание сохранить, я забыл добавить. Но вообще ты можешь заранее сгенерить массив и сразу мапить, не используя while

Roman-M Автор вопроса
Alex
А ну и внутри самой ссылки можно тоже через замыка...

да, об этом я как раз и писал в ответе, но короткого решения не нащшел, а по простому через пуш создавать массив как-то некрасиво.

Roman-M Автор вопроса

но тут количество может быть разное и не с начала начинаться.так пробовал. получается нормально.

const newArr = (start, end) => Array(end-start + 1).fill().map((_, index) => start + index)

Roman-M Автор вопроса
Alexander
const newArr = (start, end) => Array(end-start + 1...

спасибо. вот так составить пробовал, но не получилось в итоге. попробую Ваш вариант.

Roman M
но тут количество может быть разное и не с начала ...

Array.from({ length: pages }, (_, i) => <div>{i}</div>) - и никаких while и map

Roman-M Автор вопроса
IceBerg
Array.from({ length: pages }, (_, i) => <div>{i}</...

спасибо. с fill отлично пошло. как и с applay ранее, но красивее и современнее.

Roman-M Автор вопроса
IceBerg
с from нет лишних действий

спасибо. и так попробую завтра.

IceBerg
Array.from({ length: pages }, (_, i) => <div>{i}</...

А почему не классику? new Array(10).fill(0).map()

IceBerg
что тут классического?)

Более понятно чем создание массива из псевдомассива

Alexey Shevchenko
Более понятно чем создание массива из псевдомассив...

не соглашусь, подобное использование псевдомассива используется повсеместно, воспринимается как опция

IceBerg
не соглашусь, подобное использование псевдомассива...

Буду знать, и мб код станет проще, но не факт

rnamod1
Где кеу

подловил

rnamod1
Где кеу

Будет больше элементов чем между end и start. Последний элемент будет меньше на единицу чем end

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта