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 ответов

12 просмотров
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

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

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

Комрады, посоветуйте, куда копать? Стал прикручивать кастомизацию тем. В OnShow главной главной формы пытаюсь загрузить из файла настроек и применить тему (на скрине, как долж...
Ed Doc
13
OnShow один раз вызывается? или возможен Hide?
Iluha Companets
14
Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
@sand_witch скорее к тебе вопрос, добавил в .cabal webdriver-w3c и вот такая ошибка от nix develop error: Package ‘script-monad-0.0.4’ in /nix/store/7vdxbra0kwbr0ys0kc5...
Fedor
5
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
Карта сайта