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

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

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

41 ответов

25 просмотров

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

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта