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

Задача сделать лайв поиск по массиву, + есть фильтрация (поиск

должен работать и по отфильтрованым элементам, и так же при нажатии на фильтры они должны учитывать слово введенное в поиск) . Так же есть удаление и добавление элементов. Как бы вы делали? Нужно же 2 стейта, один просто data в который придут данные с сервера, а второй filteredData , из которого и будет отрисовка (map) ? т.е. в функциях поиска и фильтров мы делаем setFilteredData(data.filter(...)...) ? или мы можем делать setFilteredData(filteredData.filter(...)...) ? Короче в любом случае нужно два стейта, что бы когда фильтры сняты, или пользователь удалил слово поиска, все вернуть на круги своя, т.к. setFilteredData(data) - исходный массив ?

41 ответов

4 просмотра

2 вариант

Евгений-Шевченко Автор вопроса
Mark Davydkin
2 вариант

почему не первый?

Евгений Шевченко
почему не первый?

Стой, перепутал, 1 вариант. Потому что нужно от исходных данных прогонять все Фильтр

Евгений-Шевченко Автор вопроса

да, исходные данные будут лежать в data стейте, а отрисовка будет лежать в filteredData , вот такое приложение типа, обычный круд с лайв поиском . т.е. я сделал и вроде как работает , setFilteredData(filteredData.filter(...)...) . Вот только при добавлении или удалении забыл в какой стейт добавлять, в исходный (data) или фильтрованый(filteredData) . Короче надо тестить походу

Евгений Шевченко
да, исходные данные будут лежать в data стейте, а ...

почему не выходит прямо в рендере фильтровать? без всяких промежуточных сохранений

Евгений-Шевченко Автор вопроса
IceBerg
почему не выходит прямо в рендере фильтровать? без...

это как? из одного стейта и рендер и фильтр ? А как потом при убирании галочки с чекбокса например, или при удалении из поиска слова, как вернуть исходные данные, если сейчас в data начальном стейте уже лежит фильтрованый массив? Начальные данные потеряны

Евгений Шевченко
это как? из одного стейта и рендер и фильтр ? А ка...

так фильтрация никак не мутирует исходные данные, она просто возвращает массив который рендерится

Евгений-Шевченко Автор вопроса
IceBerg
так фильтрация никак не мутирует исходные данные, ...

так она же кладет в себя же в итоге , если рендер из нее и фильрация по ней. Был стейт data с начальными данными. Мы из него рендерим. потом делаем поиск типа с фильторами setData(data.filter...) . Все в дате теперь лежит массив например только активных карточек. Где теперь взять начальные данные, где были все карточки?)

Евгений Шевченко
так она же кладет в себя же в итоге , если рендер ...

так зачем сетить отфильтрованные данные не пойму? что мешает взять массив и вызвать filter в ренедее?

Евгений Шевченко
так она же кладет в себя же в итоге , если рендер ...

{arr.filter(item => item.name.includes(searchString))} например выведет фильтрацию по строке

Евгений-Шевченко Автор вопроса
IceBerg
{arr.filter(item => item.name.includes(searchStrin...

а чекбоксы и их фильтр куда писать? что за каша будет в рендере. А удаление элементов и добавление ?

Евгений Шевченко
а чекбоксы и их фильтр куда писать? что за каша бу...

удаление добавление влияет на исходный массив, а на фильтрацию никак не влияют

Евгений Шевченко
а чекбоксы и их фильтр куда писать? что за каша бу...

чекбокс это всего лишь дополнительное условие для фильтра

Евгений-Шевченко Автор вопроса
IceBerg
какой ещё фильтр чекбоксов?

выше же я нарисовал приложения макет и все расписал) Если ты ввел в поиске слово, оно там что то нашло , и нажал на чекбокс "активные" , слово в поиске осталось , и должен отработать фильтр по "активным" только еще с учетом слова поиска.

Евгений Шевченко
выше же я нарисовал приложения макет и все расписа...

ну и что внутри filter нельзя написать два условия? или дважды вызвать filter?

Евгений-Шевченко Автор вопроса

там не два условия, а 3 минимум - искать по всему, искать по активным если чекбокс активных включен ,искать по не активным если чекбокс неактивно включен(одноврменно выбран только 1 чекбокс, с другого галка снимается) . Плюс эти условия надо уже вешать на хендлер для чекбоксов, т.к. при нажатии на них должен сработать поиск . Так же хендлер для самого окошка поиска с фильтром, т.к. при написании слова там - должен сработать фильтр и учитываться чекбоксы тоже. Если они выбраны искать только по ним и тд. Хз как ты хочешь сделать всё это в рендере

Евгений Шевченко
там не два условия, а 3 минимум - искать по всему,...

так хедлеры должны менять значения чекбоксов и строки ввода

Евгений Шевченко
выше же я нарисовал приложения макет и все расписа...

а без галочек типо ничего выводиться не должно получается?) это должны быть ради кнопки, и опция "все"

Евгений-Шевченко Автор вопроса
IceBerg
а без галочек типо ничего выводиться не должно пол...

Должны быть, но дизайнер видимо так видел) Без чекбоксов отрисовавается "все" , т.е. общая дата. А в рендере что map тогда не будет? Только filter ? Я чет привык что map ится из массива отрисовка и тд

Евгений Шевченко
Должны быть, но дизайнер видимо так видел) Без чек...

а с двумя чекбоксами тоже отрисовываются "все"? что за бред)

Евгений-Шевченко Автор вопроса
IceBerg
а с двумя чекбоксами тоже отрисовываются "все"? чт...

два не работают, если установлен один, со второго снимается. Это я уже сделал в целом пофиг не стал спорить с ними

Евгений-Шевченко Автор вопроса
IceBerg
ну это полу-радио

да и хрен бы с ним) Меня больше волнует реализация функционала. Я сделал всё "в лоб" , т.е. два стейта - data, filteredData .Из второй в рендере map`ом отрисовка. Во вторую и сетается setFilteredData(filteredData.filter(..)..) или вроде того. Два хендлера - один на лайв поиск с таким функционалом, второй на чекбоксах. Сделано через form анта. Получаю данные с формы, например поиска . В чекбоксах там же ставлю их состояние ,form.setFieldsValue( {active: true, inactive:false}) и наоборот. Так они чекаются или не чекаются

Евгений-Шевченко Автор вопроса
IceBerg
{arr.filter(item => item.name.includes(searchStrin...

а map после этого фильтра? для отрисовки

Евгений Шевченко
а map после этого фильтра? для отрисовки

да, но если тебе твой вариант привычнее, то делай как удобнее, может тебе этот отфильтрованным массив ещё понадобиться где-то, тогда из рендера не вытащишь конечно

Евгений-Шевченко Автор вопроса
IceBerg
да, но если тебе твой вариант привычнее, то делай ...

А так как я описал такое можно в прод пускать или это совсем говнокод ?

зачем useLocalStorage нужен? может там какие-то непонятные пляски

IceBerg
зачем useLocalStorage нужен? может там какие-то не...

короче проблема решилась когда я сделал await перед navigate

Евгений-Шевченко Автор вопроса
IceBerg
тебе на код ревью скажут)

У меня на код ревью сеньор которому всегда все говно и можно лучше, если сделано не так как он бы сделал 😔а как сделать как он хз. Можно в 5 строчек написать говорит , а как это сделать я хз

Китикет Базёнка
пусть расскажет

так как он бы сделал, говорил же)

Евгений-Шевченко Автор вопроса
Китикет Базёнка
пусть расскажет

Он скажет образно без кода, плюс не знает всех нюансов задачи до конца , и я далеко не всегда понимаю и могу учесть все нюансы в его идее . А если писать он скажет чё я должен погружаться в твою задачу ещё полностью, или за тебя код писать ?

Евгений-Шевченко Автор вопроса
Илюша 🎂
покажи код который он критикует

Вечером скину с рабочего компа

Фигня, надо просто useMemo или селекторы если это ридух

Китикет Базёнка
Фигня, надо просто useMemo или селекторы если это ...

ну кстати да, селектор с указанием какие фильтры применены и что нужно найти и далее внутри делается обычный [].filter(); но я делал на компоненте в свое время такое где каждый новый добавленный фильтр был как функция внутри пайпа, чтобы можно было циклично вызывать .filter() и передавать туда эти коллбеки то есть был массив фильтров const filters: (() => any)[] = []; и массив исходных элементов const elements = []; ну и const filteredArray по изменению массива фильтров дёргался запуск фильтрации на исходном массиве elements и полученный результирующий стейт вставлялся в filteredArray

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта