между табами и менялся контент, но делать это не меняя урл. При каждом изменении selectedTab в CategoryTabs, будут пересоздоваться все TabView?
Если не ошибаюсь, то да.
ну это нормальная праткика? или мне стараться делать так чтоб пересоздавались только 2 таба, новый и старый
key не хватает, но в любом случае ты меняешь пропсы и будешь перерисоввывать все
а есть другой способ? или этот годится? я не давно начал на реакте писать. должны ли пересовыаться всегда компоненты? в андроиде к примеру это плохо когда так
Не совсем понял суть вопроса. У вас все элементы списка зависимы от стейта, значит они все и будут перерисовываться, а не только 2
как сделать так чтоб пересовывались только 2? это возмжно?
В данном случае нет.
если там внутри ничего безумного не планируется, то вероятно это не самая важная проблема, но в теории можно этого избежать. Способа не скажу, сам бы сидел игрался в этом деле. Если Егор более прокачан, то может стоит послушать его, ну или если время есть - поискать возможные решения - точно узнаешь что то новое
какие именно 2 нужны? По какому принципу они выбираются из всего списка?
ну клик обычный, 20 табов. Gin в активном состоянии, если нажму на Rom, должны пересоздаться только Gin и Rom
попробуй вместо selectedTab юзать isSelected и передовать соответственно true и false; так же не забудь про key в map, не уверен что поможет, но капать в любом случае в сторону ухода зависимости в пропсах
Функция то вызовется, но перерисуеься зависит от твоего кода + алгоритма реконсилиации
Можно убрать selectedTab из контейнера и определить локальный стейт в самом компоненте TabView , и там его менять. Например внутри TavView создать стейт isSelected и его менять true\false в зависимости от того кликнули ли на что-то в этом компоненте или нет. Тогда у тебя не будет ре-рендерится весь список.
я думал об этом. но тогда старый таб который должен выйти из активного состояния. как у него поменять, если локальный стейт меняется только при клике
Одновременно только 1 таб может быть выбран?
Тогда создай состояние где записывается индекс выбранного элемента и создай условие что если активный индекс равен индексу текущего элемента, то добавлять класс с нужными стилями.
Так все равно этот индекс из контейнера нужно будет каждому ребенку передать и ничего не поменяется
я работаю с стайлед компонент, возможно заменить добавление класса на что то другое?
Добавь дополнительный проп с нужными стилями в переменную компонента который будет активен при условий что индекс текущего элемента равен текущему индексу.
Обсуждают сегодня