Olég
добавили уже в доку даже, раньше не было
Павел
Есть же всякие splice и прочее, они для тебя тоже костыльные?
Так я как раз и хочу избежать кучи лишних щагов и вместо setState([ ...state.splice(0,idx-1), изменения, ...state.splice(idx+1) ]) делать просто setState( [idx]: изменения )
Nick
Ну проитерирую, в чем подвох?
потому ты можешь написать функцию, которая будет обновлять любой массив и использовать её, оставив костыли под капотом. а твоё решение создаёт гору органичений: нет возможности использовать filter, фактически нет адекватной возможности сделать append, prepend, сохраняя порядок элементов, когда новые данные доехали - это если ты будешь прямо по свойствам объекта итерироваться. а если нет, то нужно 1) получить массив из апи, 2) преобразовать массив в объект и положить в стор, 3) перед рендером преобразовать объект в массив, и по итогу - тот же самый костыль.
Павел
Вообще основная идея у меня была воспользоваться тем, что setState меняет только ту часть стейта, что я ему передаю и передавать только тот "туду", что изменился, не делая по другим splice, map, filter и пр... Но раз так будет больше проблем в других методах, тогда ой. А, кстати, это еще наверное и с хуками не будет работать? useState же уже не конкатенирует поля стейта, а просит все данные целиком при изменениях?
Павел
Но нормализация по id - это практически моя идея, пойду почитаю.
Ura
Вообще основная идея у меня была воспользоваться тем, что setState меняет только ту часть стейта, что я ему передаю и передавать только тот "туду", что изменился, не делая по другим splice, map, filter и пр... Но раз так будет больше проблем в других методах, тогда ой. А, кстати, это еще наверное и с хуками не будет работать? useState же уже не конкатенирует поля стейта, а просит все данные целиком при изменениях?
как-то сложно это все звучит. вместо того, чтобы вынести всякие добавления и изменения в утилки, и вызывать просто как (условно) setState(addItem(id)), придумываются какие-то непонятные решения, которые нужно как минимум объяснить ревьюеру и убедить его в необходимости такого
Egor
Всем привет. Как можно задать <Route /> пропс path с квери параметрами? Аля <Route path="/news?category=1" /> Нужна именно реализация с квери, чтобы сео олдового сайта не полетело. Прослойку писать не особо хочется
Ura
Мне что-то подсказывает, что setState( [347]: { changes }) должно работать в 600 раз (условно, может в 10) быстрее, чем setState( ...splice(0,346), { changes }, ...splice(348) ) на массиве из 600 объектов
если начинается работа с реально большими массивами, то это должно происходить на бекенде, а пользователь должен видеть всякие лоадеры и прочее мыло
arts
Я с точки зрения производительности. Зачем проходить по всем элементам массива, скажем, из 600 объектов, если надо изменить только один, id которого я знаю
С точки зрения производительности при перерендере потом гораздо дешевле сравнить ссылки, чем рекурсивно ходить в каждый объект и проверять, не изменились ли его поля
Egor
а зачем их в роуте указывать?
Чтобы по конкретному роуту рендерить компонент. Могу написать прослойку, распарсить все квери и от нужной комбинации рендерить нужный компонент. Но не очень это хочется делать по ряду причин. Вот и думаю может я что-то упустил в доке и кто-то уже с этим сталкивался
Ura
Чтобы по конкретному роуту рендерить компонент. Могу написать прослойку, распарсить все квери и от нужной комбинации рендерить нужный компонент. Но не очень это хочется делать по ряду причин. Вот и думаю может я что-то упустил в доке и кто-то уже с этим сталкивался
я не до конца понимаю саму задачу, но квери в роут не указать никак. Обычно, квери отвечает не за то, какой компонент выводить, а за то, какие данные выводит конкретный компонент. В каком порядке или в каком количестве, например. А за то какой именно компонент будет отображаться отвечают params
Egor
я не до конца понимаю саму задачу, но квери в роут не указать никак. Обычно, квери отвечает не за то, какой компонент выводить, а за то, какие данные выводит конкретный компонент. В каком порядке или в каком количестве, например. А за то какой именно компонент будет отображаться отвечают params
Да я в курсе всего этого. И доку я читал, но написал сюда, мало ли. А задача в том, что есть старый и крупный проект, и весь роутинг у него через гребанные квери параметры. А он имеет много пользователей + индексируется поисковиками не один год. Текущий роутинг по квери параметрам необходимо сохранить. Я ищу способ безболезненно это реализовать
Egor
а, ну такие истории мы знаем) а обертку так болезненно написать разве? я только такой вариант вижу, мб люди поопытнее предложат что еще
У меня ещё SSR и на каждую страницу в cdm зашита логика. Все рендерилось из конфига, там был и серверный запрос, но теперь надо что-то думать...
Ura
У меня ещё SSR и на каждую страницу в cdm зашита логика. Все рендерилось из конфига, там был и серверный запрос, но теперь надо что-то думать...
ну обертка это как минимум простое решение, следующему разрабу на проекте будет понятно что происходит и как ничего не сломать
Bogdan
переключал нпм на локальную репу, хочу назад: npm set repository https://registry.npmjs.org/ но он как смотрел на локальную, так и смотрит сталкивался кто?
Sergei
Да, это самая первая моя мысль была, видимо это единственный вариант)
можно попробовать извернуться с регуляркой для роута, но не уверен
Bogdan
В лок файле какие урлы?
локальный остался, рукой поменять что ли прям
alex
Ребят, привет нужен совсем в какую сторону копать. проблемы с тестовым заданием(
alex
https://codesandbox.io/s/38dn8
alex
При клике по задаче вызывается ререндер списка. Нужно оптимизировать его таким образом, чтобы ререндер осуществлялся для предыдущего и текущего элемента списка, без использования shouldComponentUpdate
alex
не могу никак додуматься. гуглил уже и так и сяк ничего не подходит, так как нужно, а нужно как shouldComponentUpdate что бы )
alex
Если кто-нибудь направит в нужном направлении - буду очень благодарен
alex
не очень понял тебя. ну так и задача что бы оптимизировать и не делать лишний ререндер у тех компонентов листа где ничего не поменялось
Bogdan
PureComponent
alex
Хочу что бы при клике на листАйтем происходил рендер только у того компонента на который я кликнул и у того который был в прошлый раз selected
Bogdan
Хочу что бы при клике на листАйтем происходил рендер только у того компонента на который я кликнул и у того который был в прошлый раз selected
я короче не понимаю, может кто то скажет, хрень какую то делаешь, у тебя и так один апдейтится
alex
ты говоришь про апдейт. а я про ре рендер. если ты открыл сандбокс - глянь в консоль и покликай на айтемы
alex
ну вот об этом и речь. ты кликаешь на один элемент. а ререндер происходит у всех. хотя они никак не меняются.
alex
pureComponent не подходит, как я понял. тк из стора приходит действительно немного другой state. Если бы можно было бы использовать shouldComponentUpdate я бы просто впихнул туда условия что если твой индекс не равен инедксу в сторе и не был ему равен, то не обновляйся
Bogdan
ну вот об этом и речь. ты кликаешь на один элемент. а ререндер происходит у всех. хотя они никак не меняются.
ну ты компонент подписал ListItem на стейт при апдейте стора у тебя каждый подписчик тригернется, но это не точно
Bogdan
ты в selected - пихал елемент по клику что ли?
Bogdan
оберни в React.memo, а вторым аргументом передай (prev, next) => { return prev.index !== next.selected; } или не selected, хотя и работает, уже посмотришь сам
Anonymous
Так пиплы такой вопрос - Есть список объектов(array of objects) и возможность выбрать из этого списка активный обьект. Можно ли сохранить выбранный объект в стейте через его индекс вместо того чтобы скопировать весь объект?(activeElementIndex = 1 вместо activeElem = {...}) и какой минус данного подхода?
Vlad
Всем привет. Ребят скажите, а есть ли ещё какой-то способ чтобы заюзать "контекст" в рендере? кроме как передачи его в пропсы через родителя? (я понял как заюзать его в ретурне, а в рендере не понимаю ещё. Если я передаю через пропсы, то там проблема с типами, так как на тайп скрипту пишу 🤪)
Rattenfänger
Такой вопрос Есть какие-нибудь видеокурсы (желательно, но необязательно) русскоязычные по практике реакта
Oleg
#offtop узнал что на win10 можно поставить ubuntu. сейчас начал работать с проектами через консоль линукса при том что файловая системы винды. я в шоке) это жир) условно можно использовать винду только для запуска vs code, а все манипуляции с пакетами, утилитами и файлами производить через консоль убунты. это просто шик.
Oleg
а в чем проблема на винде делать то же самое
на винде элементарно сложно удалить папку через rm -rf
Димон
почему
Попробуй поработать с гитом Сделать коммит А потом из павершелла зайти в папку
Китикет
Юзай bash из пакета с виндовым гитом, там все что нужно и сразу
Димон
Оно как-то говено с основной системой работает
Китикет
Юзай bash из пакета с виндовым гитом, там все что нужно и сразу
Плюс его можно в контекстное меню добавить, нажимаешь где угодно пкм и открываешь баш, вообще шик по-моему)
Oleg
Юзай bash из пакета с виндовым гитом, там все что нужно и сразу
во-первых ставить приложения удобнее на ubuntu одной командой чем на винде через визуальные установщики. и у git bash не все команды есть.
Димон
У меня стационарный на вин 10 Wsl это жопа
Oleg
поставить ubuntu как по мне вообще сверх шик
у меня ноут на винде вытягивает второй экран в 4к. а вот с убунту ноут начинает пыхтеть, + проблемы с vsync и прочие фигни которые бесят. про интерфейс 2000х я молчу
Димон
Есть даже с npm i баги открытые В гитхабе
Oleg
Интересно каких тебе команд не хватает, ты хардкорщик что ли прямо?
ну мне прям дико не хватает rm -rf. запариваюсь каждый раз бегать по папкам мышкой и удалять
Китикет
Ой про визуалку лучше не говорить, у линей совместимость с современными видеокартами нулевая, у меня например убунта каждые пару часов зависала намертво, так и не пофиксил
Oleg
ubuntu ставят не из-за интерфейса
ну если ты фронтендер, то к интерфейсу не должен быть равнодушен)