Lena
https://codesandbox.io/s/github/malinovaelena/avito-beta
Lena
cards-container
Lena
components
va1
Filter создаёт новый фильтрованный массив из того, к которому применялся. В стейте остаётся тот-же самый
va1
Сходу не нашёл, есть ли сетстейт для отфильтрованного массива
Lena
нету для отфильрованного
Lena
получается, что в фильтре надо отфильтровать входящий массив а потом записать его в стейт?
va1
Да
va1
Отфильтрованный массив это уже новый массив
va1
Старый не мутируется
va1
Хотя я думаю есть способы получше, сам ток учусь
rovnyart
классное расследование, еще дружеский совет - не использовать let { foo, bar } = props - смысла абсолютно никакого нет
rovnyart
let - это почти всегда хуйня)
va1
Хотя я думаю есть способы получше, сам ток учусь
Может геттер создать get filtereditems и их рендерить.
El
как это вообще впринципе логично сделать?
Обычно логично сделать это на бэкэнде, если нет то просто filter вызвать где массив выводишь
Lena
спс! буду пробовать
rovnyart
Обычно логично сделать это на бэкэнде, если нет то просто filter вызвать где массив выводишь
плюсану за бэкенд, логика фильтрации на клиенте явно лишняя, в стейте такие штуки не хранят по-хорошему, а пользуются сервером
El
ну все от кейса зависит, бывает и на фронте надо, но фильтрация это результат обработки данных, которые например уже лежат в каком то стейте...и потом это сохранять в тот же стейт немного странно
va1
ну все от кейса зависит, бывает и на фронте надо, но фильтрация это результат обработки данных, которые например уже лежат в каком то стейте...и потом это сохранять в тот же стейт немного странно
Фильтровать в контейнере и результат пробрасывать в презентационный. Каждое срабатывания фильтра - новые пропсы, компонент рендерит я, исходные данные нетронуты. Вполне звучит)
va1
А в данном случае пропсы и стейт компонента неизменны, но мы должны как-то рендерить разные данные по клику, немного сложно
Lena
кароче перезаписывать стейт не получится, ну по крайнеф мере в том виде в котором щас .
Lena
Буду пробовать другое
Lena
я склоняюсь к тому, что изначально записать всю фильтрациюв стейты, ибо компонентов то немного и может попробовать взависимости от фильтра возвращать прост какой-нибудь из стейтов с правильным массивом?
Lena
я это сейчас уже не буду делать, голова совсем не варит , но как самый первый приходящщий на ум
va1
Вынести рендер карточек в отдельный компонент и отфильтрованный массив кидай как пропсы. Тогда будет ререндериться компонент каждый раз, как применяешь фильтр
Lena
+
va1
Либо геттер поможет в данном случае, инфа не 100%
Lena
я так думала сделать когда только файлы к приложению создавала, а потом пффф, я и так смогу зачем раздувать)) ага ....
va1
Но исходный массив нельзя мутировать
Lena
сначала с рендером попробую думаю
va1
Есть паттерн, презентационный компонент и компонент контейнер. В основном вся логика в контейнере (типо блока по бэм утрированно), а презики (элементы) рендерят пропсы.
va1
сначала с рендером попробую думаю
Ещё на ум пришло. В стейте держать showitemtypes : "", при изменении селекта вызывается метод onchange(e) который вызывает setstate showitemtypes : e.target.value (или датааттрибуты e.target), или че там у селектов. Тогда if else в filtrredcardscategory можно упростить до this.state.showitemtypes ? array.filter(it) => it.category === this.state.showitemtypes : array потом мапить результат этого метода, и уже потом рендерить. Так хоть при смене селекта будет стейт меняться компонента. Пустая строка в стейте = false => будет выводиться нетронуты массив, ток надо проработать случай, когда выбрано show all в селекте, или ченить такое (типо проверка, если выбрана опция - - - - -, то сбрасывать showitemtypes) Хз может поможет или то на то и выйдет)
Alexander
Есть листенер document.addEventListener("mousedown", handleClickOutside); Как в handleClickOutside проверить, что я не нажал на определенный элемент? Есть его ref
Alexander
Тупой. Сорян. Вопрос исчерпан
Nikita
подскажите как лучше реализовать такой компонент? Нужно чтобы на всех экранах он выглядел одинаково
🦜
Aidyno
Эх, сейчас бы в книге писать о реакт роутере
это же комплекс, структурированный подход
🦜
И люди стали забывать как ещё можно делать роутинг
Stepan
Всем салют. Парни а кто знает что за массивы полдятся (скриншот) в реакт приложении? Я такой не созавал. Что это может быть?
Oleg
Просто в преакте больше багов
а преакт вообще используют где-то?
Oleg
были мысли его подучить из-за скорости.
Oleg
Используют.
и как часто?
Sergei
были мысли его подучить из-за скорости.
Я читал недавно, по мне так смысла нет, если уже на нём команда не пишет и нет проектов
Danila
(а то и ниже)
Danila
были мысли его подучить из-за скорости.
Не из-за скорости, а из-за размеров бандла. Скорость там такая же после файбера
Danila
и как часто?
Да кто ж его знает. Звёзд и форков достаточно много. Я лично в пет-проектах использовал и на проде один раз при билде подменял реакт и реакт-дом на преакт, это был встраиваемый виджет
Danila
подумаешь, лишние 100кб реакту...
Если это не сарказм, то ты зря
Danila
Но это было до хуков.
Oleg
а сейчас?
Danila
А сейчас они вроде допилили хуки и опять можно юзать, если x из беты вышел.
Oleg
кто "они"? преакт? в преакте есть хуки?
Danila
кто "они"? преакт? в преакте есть хуки?
Они - разработчики преакте. Да, в preactX (preact-next, preact 10) есть хуки и контекст
Danila
Но он ещё пока только в RC
Danila
https://github.com/preactjs/preact/releases
Daniil
Если это не сарказм, то ты зря
Это если уж серьезно гонятся за скоростями, способов оптимизации бандла море
Danila
есть контекст а где контекста нет?
В старых версиях преакта
Danila
Это если уж серьезно гонятся за скоростями, способов оптимизации бандла море
Это зависит от конкретного проекта. Если весь проект 200кб, то 100кб реакта - это половина. Никакая оптимизация тебе в этом не поможет.
Daniil
Проект на 200кб, интересно
Danila
Не всем и не всегда нужны мегабайтные проекты
Daniil
Если уж расуждать о пользователях в метро/трамвайчиках/деревне, то 200кб ну хз
Danila
Тебя никто не заствляет, но есть куча людей, которым TTI важнее гордости
Daniil
Я не спорю, мы тоже нашего монстра обмазывали как могли
Danila
100кб js !== 100кб статики
Daniil
Я это понимаю
Danila
Это не только загрузка, это ещё и парсинг и исполнение на слабом железе
Smaug
Господа, всем привет Подскажите, пожалуйста, следующий момент: использую draftjs, для эдитора текста, при добавлении каких-то стилей в текст (цвет/размер), исходная выходная HTML (конвертирую с помощью stateToHTML из draft-js-export-html) Вопрос: как получить стили, заданные в эдиторе? Спасибо
Danila
Телега тормозит адово второй день что-то
Daniil
Вроде говорили про слоу мод или шо то там пару дней назад, мол раз в 30с сообщение