обновлению компонента,
useEffect(() => {
dispatch(GetPosts(params))
}, [params])
а если передать все свойства объекта, то компонент обновляется только после обновления свойств, как положено.
useEffect(() => {
dispatch(GetPosts(params))
}, [params.title, params.body, params.active])
Можно-ли как-то лаконично передать все свойства объекта в deps, или как еще можно решить эту проблему?
Object.values?
У тебя объект меняется. Используй только то что нужно и это передавай в экшн. А не пачкой.
а что если у меня много свойств и в будущем нужно будет добавлять еще? поэтому решил спросить у знающих, может есть способ поудобнее
Ты понимаешь как работает useEffect?
ага. а ты это к чему?
да. юзэффект это метод, который срабатывает после рендера компонентов или при изменении аргументов []
К тому, что ты туда передаешь объект. Который не понятно от чего обновляется. А во втором твоем примере, ты передаешь лишь часть, которая не меняется.
Наоптимизировался)
Что же делает useEffect? Используя этот хук, вы говорите React сделать что-то после рендера. React запомнит функцию (то есть «эффект»), которую вы передали и вызовет её после того, как внесёт все изменения в DOM. В этом эффекте мы устанавливаем заголовок документа, но мы также можем выполнить запрос данных или вызвать какой-нибудь императивный API.
это понятно, я недалек в реакте и хочется знать, как эту проблему другие люди решают. можно ведь например сделать глубокое сравнение объектов и обновлять в случае, если они не совпадают?
Ну у тебя в экшене, что, все из параметров используется?
не все сразу конечно. в зависимости от действия используется соответствующий параметр и их штук 15 например. разве вписывать их в deps есть лучшее решение?
А не проще разделить экшн на мелкие экшены, а не делать все скопом в одном месте?
useMemo, если я правильно понял вопрос и проблему
А чем он тут поможет? У него же экшены бахают из-за того, что в депсы он кинул весь объект, а этот объект обновляется после этого экшена.
если объект в состоянии мутирует в сторону удаления подобъекта, то обновляется весь стейт. если же подобъект добавляется в состояние, ре-рендер всего состояния не вызывается. тебя же этот вопрос интересует?
Откуда берется "params"?
проблему ты понял правильно, а я ищу ее решение. просто не хочется вписывать все свойства объекта в deps, т.к это масштабируется плохо. вот можно было бы сделать так useEffect(() => {}, […params]), но увы, ошибка синтаксическая
решение простое. не использовать реакт
Что делает getPosts?
принимает параметры и отправляет запрос в апи
после чего обновляет стейт
Какие параметры? Почему бы не разбить экшн? Есть полное впечатление, что ты идешь вообще не туда. Если у тебя прям на столько тяжелая ситуация, ну сделай глубокую проверку на внутренности объекта.
у меня тоже есть такое впечатление.. на деле там ситуация сложнее, у меня там параметры для фильтрации и сортировки, все это хранится в контексте и при обновлении я вот должен эшкн диспатчить
По-хорошему, для фильтрации один экшн, для сортировки другой и т.д.
То есть у вас useEffect зависит от обновления данных, которые сам и обновляет, понимаете?
У тебя в этом объекте и самы посты лежат еще чтоль?
конечно, конечно, вот и ищу решение. возможно использовать событие в контексте
Используйте useReducer в контексте, и с его помощью обновляйте его состояние
ну напимер захотел я посты отфильтровать, понажимал на фильтры и получил обновленный список постов
Ну все теперь будет +1 к последователям редакс не нужон🌚
Не факт, что этим фильтрам было бы лучше в редаксе)
Обсуждают сегодня