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

Привет, как правильно решить такую проблему: код ниже приводит к бесконечому

обновлению компонента,


useEffect(() => {
dispatch(GetPosts(params))
}, [params])


а если передать все свойства объекта, то компонент обновляется только после обновления свойств, как положено.


useEffect(() => {
dispatch(GetPosts(params))
}, [params.title, params.body, params.active])


Можно-ли как-то лаконично передать все свойства объекта в deps, или как еще можно решить эту проблему?

37 ответов

7 просмотров

Object.values?

У тебя объект меняется. Используй только то что нужно и это передавай в экшн. А не пачкой.

Frank 🦠- Автор вопроса
Илья
У тебя объект меняется. Используй только то что ну...

а что если у меня много свойств и в будущем нужно будет добавлять еще? поэтому решил спросить у знающих, может есть способ поудобнее

Frank 🦠- Автор вопроса
Илья
Ты понимаешь как работает useEffect?

да. юзэффект это метод, который срабатывает после рендера компонентов или при изменении аргументов []

Frank 🦠
ага. а ты это к чему?

К тому, что ты туда передаешь объект. Который не понятно от чего обновляется. А во втором твоем примере, ты передаешь лишь часть, которая не меняется.

Илья
Наоптимизировался)

Что же делает useEffect? Используя этот хук, вы говорите React сделать что-то после рендера. React запомнит функцию (то есть «эффект»), которую вы передали и вызовет её после того, как внесёт все изменения в DOM. В этом эффекте мы устанавливаем заголовок документа, но мы также можем выполнить запрос данных или вызвать какой-нибудь императивный API.

Frank 🦠- Автор вопроса
Илья
К тому, что ты туда передаешь объект. Который не п...

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

Frank 🦠
это понятно, я недалек в реакте и хочется знать, к...

Ну у тебя в экшене, что, все из параметров используется?

Frank 🦠- Автор вопроса
Илья
Ну у тебя в экшене, что, все из параметров использ...

не все сразу конечно. в зависимости от действия используется соответствующий параметр и их штук 15 например. разве вписывать их в deps есть лучшее решение?

Frank 🦠
не все сразу конечно. в зависимости от действия ис...

А не проще разделить экшн на мелкие экшены, а не делать все скопом в одном месте?

Frank 🦠
не все сразу конечно. в зависимости от действия ис...

useMemo, если я правильно понял вопрос и проблему

Volodymyr Klimov
useMemo, если я правильно понял вопрос и проблему

А чем он тут поможет? У него же экшены бахают из-за того, что в депсы он кинул весь объект, а этот объект обновляется после этого экшена.

Frank 🦠
это понятно, я недалек в реакте и хочется знать, к...

если объект в состоянии мутирует в сторону удаления подобъекта, то обновляется весь стейт. если же подобъект добавляется в состояние, ре-рендер всего состояния не вызывается. тебя же этот вопрос интересует?

Откуда берется "params"?

Frank 🦠- Автор вопроса
Andrew
если объект в состоянии мутирует в сторону удалени...

проблему ты понял правильно, а я ищу ее решение. просто не хочется вписывать все свойства объекта в deps, т.к это масштабируется плохо. вот можно было бы сделать так useEffect(() => {}, […params]), но увы, ошибка синтаксическая

Frank 🦠
проблему ты понял правильно, а я ищу ее решение. п...

решение простое. не использовать реакт

Frank 🦠- Автор вопроса
Илья
Что делает getPosts?

принимает параметры и отправляет запрос в апи

Frank 🦠- Автор вопроса
Frank 🦠
принимает параметры и отправляет запрос в апи

Какие параметры? Почему бы не разбить экшн? Есть полное впечатление, что ты идешь вообще не туда. Если у тебя прям на столько тяжелая ситуация, ну сделай глубокую проверку на внутренности объекта.

Frank 🦠- Автор вопроса
Илья
Какие параметры? Почему бы не разбить экшн? Есть ...

у меня тоже есть такое впечатление.. на деле там ситуация сложнее, у меня там параметры для фильтрации и сортировки, все это хранится в контексте и при обновлении я вот должен эшкн диспатчить

Frank 🦠
у меня тоже есть такое впечатление.. на деле там с...

По-хорошему, для фильтрации один экшн, для сортировки другой и т.д.

Frank 🦠
у меня тоже есть такое впечатление.. на деле там с...

То есть у вас useEffect зависит от обновления данных, которые сам и обновляет, понимаете?

Frank 🦠
у меня тоже есть такое впечатление.. на деле там с...

У тебя в этом объекте и самы посты лежат еще чтоль?

Frank 🦠- Автор вопроса
Volodymyr Klimov
То есть у вас useEffect зависит от обновления данн...

конечно, конечно, вот и ищу решение. возможно использовать событие в контексте

Frank 🦠
конечно, конечно, вот и ищу решение. возможно испо...

Используйте useReducer в контексте, и с его помощью обновляйте его состояние

Frank 🦠- Автор вопроса
Илья
У тебя в этом объекте и самы посты лежат еще чтоль...

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

Volodymyr Klimov
Используйте useReducer в контексте, и с его помощь...

Ну все теперь будет +1 к последователям редакс не нужон🌚

Maxim Koylo
Ну все теперь будет +1 к последователям редакс не ...

Не факт, что этим фильтрам было бы лучше в редаксе)

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
Кибер Бомж
8
Карта сайта