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

Ребят, подскажите как в такой задаче лучше поступить, есть массив

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

При попытке добавить новое слово, в метод приходит новый объект (который нужно добавить в след за активным). Нужно найти активный объект в массиве, узнать его индекс и после чего добавить за ним новый объект.
Один из вариантов, это сделать через array.splice(index + 1, 0, {newObj}
И потом этот массив снова записать в стейт.
Но splice мутирует мой массив, есть ли ещё какие то варианты?

14 ответов

16 просмотров

[...array, item]

Юрий- Автор вопроса
Dmitry Croft
[...array, item]

И как ты с помощью спреда запишешь новый объект в нужное место?

Юрий
И как ты с помощью спреда запишешь новый объект в ...

а, тебе не в конец. Тогда можешь через map либо reduce

Верная идея со сплайсом, но вначале скопируй исходный массив

Юрий- Автор вопроса
Dmitry Croft
а, тебе не в конец. Тогда можешь через map либо re...

Ну я сделал, const new = array.slice() для копии Потом const index = new.map(x => x.Id).indexOf(activeObj.Id) Это возвращает индекс. Потом new.splice(index + 1, 0, {newObj} Потом мой new пытаюсь записать в стейт

Юрий
Через slice() или просто [...old]

Без разницы, вот выше укзали верный вариант

Юрий- Автор вопроса
Dmitriy Shuleshov
Без разницы, вот выше укзали верный вариант

И активное слово получается нужно обнулять, так как его индекс уже другой?

Юрий
И активное слово получается нужно обнулять, так ка...

Сетай в стейт не слово а активный индекс сразу

Юрий- Автор вопроса
Dmitriy Shuleshov
Сетай в стейт не слово а активный индекс сразу

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

Юрий
я сетаю целый обьект, в котором и слово и его ID. ...

Индекс можно сразу прокинуть в замыкании из мапа

Юрий- Автор вопроса
Dmitriy Shuleshov
Индекс можно сразу прокинуть в замыкании из мапа

подскажи пожалуйста, а с чем может быть связано то, что индекс внутри метода который добавляет старый, а не новый? у меня получается делиться на родителя и ребенка логика. внутри ребенка они мапяться и есть метод который слушает нажание на кнопку и если нажали вызывает колбэк родителя и передает обьект (что за кнопка и тд) в родителе внутри метода, я проверяю ActiveIndex который находится внутри стейта и делаю уже, то, что писал ранее: if (activeIndex >= 0) { const newEquation = [...equation].splice(activeIndex + 1, 0, keyEvent); setEquation(newEquation); setActiveIndex(null); } а метод который сетит активное находится у каждого слова, при мапе внутри компонента ребенка, onClick={() => setActiveIndex(index)} почему когда я выбираю первый раз слово, индекс сетиться, добавляется в массив и все окей, а при выборе следующего слова, индекс старый и добавляется не в то место?

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта