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

Привет. подскажите плиз. при рендере страницы срабатывает запрос authMe, в

респонсе прихоит userId который я сетаю в стейт. и есть вот такой блок на странице в котором надо отображать данные на основании имеющего в стейте userId. я закинул диспатч этой санки в useEffect. проблема в том что возникает циклическая зависимость. т.е. изначально listOfAccount и userId равны null, после того как из authMe запроса приходит userId срабатывает useEffect и запускает диспатч listOfAccounts который записывает данные в стейт, т.е. стейт меняется, что запускает useEffect ещё раз и так по кругу. как победить циклическую зависимость в данном случае? если я уберу из-зависимостей listOfAccount на странице не отображаются новые данные пока я не нажму обновить страницу.

28 ответов

16 просмотров

гм... Ну типа два запроса делать надо? первым ты получаешь userId? а вторым данные по пользователю используя этот userId ? А это никак нельзя в пределах одной санки сделать? что бы логику в компоненты не выносить

А зачем listOfAccounts в зависимостях useEffect, если ты его внутри useEffect не пользуешь?

Pavel-Vladimirov Автор вопроса
Rain
А зачем listOfAccounts в зависимостях useEffect, е...

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

Pavel Vladimirov
если его убрать то циклическая зависимость пропада...

Так а какую роль в этом юзефекте играет listOfAccounts, он там вообще не используется, просто вызывает лишний раз юзстейт

Pavel Vladimirov
если его убрать то циклическая зависимость пропада...

гм.. Второй useEffect ? с одной зависимостью в виде listOfAccounts ?

Pavel-Vladimirov Автор вопроса
Rain
гм.. Второй useEffect ? с одной зависимостью в в...

а не тоже самое разве получится? ну ща попробую конечно

Pavel Vladimirov
а не тоже самое разве получится? ну ща попробую ко...

ну во втором useEffect ты не будешь просто дергать dispatch(listOfAccountsTC...

Pavel-Vladimirov Автор вопроса
Rain
ну во втором useEffect ты не будешь просто дергать...

так мне надо его дёргать. он жи обновляет стейт который надо отрисовать на странице

Pavel Vladimirov
так мне надо его дёргать. он жи обновляет стейт ко...

Ну это первый у тебя будет делать с зависимостью от userId а второй будет зависеть только от listOfAccounts и внутри него будешь обновлять картинку

Pavel-Vladimirov Автор вопроса
Pavel-Vladimirov Автор вопроса
Rain
Ну это первый у тебя будет делать с зависимостью о...

нифига. ловлю всё ту же циклическую зависимость((

Pavel-Vladimirov Автор вопроса

там запрос за новыми данными. массив если обновился то надо отрисовать новые элементы

Pavel Vladimirov
там запрос за новыми данными. массив если обновилс...

массив это listOfAccaunts ? и вчем смысл второго диспатча listOfAccauntsTC c тем же самым userId ?

Pavel-Vladimirov Автор вопроса
Rain
массив это listOfAccaunts ? и вчем смысл второго ...

смотри, есть у меня форма в которой создаётся новый аккаунт, в онсабмит, первый диспатч это регистрация нового аккаунта, после его выполнения я запускаю 2 диспатча в которых приходят массивы для разных блоков на странице.

Pavel-Vladimirov Автор вопроса
Rain
массив это listOfAccaunts ? и вчем смысл второго ...

вот пытаюсь как-то сделать чтобы новый аккаунт сразу отображался в списке на странице

Pavel Vladimirov
вот пытаюсь как-то сделать чтобы новый аккаунт сра...

Но второй useEffect ни делает у тебя сейчас ничего, кроме как зацикливает сам себя так как в listOfAccaunts у тебя каждый раз будет новый объект (а массив это объект) и справедливо что {} !== {} если только это не один и тот же объект то у тебя каждый раз второй useEffect будет срабатывать после обновления данных в listOfAccaunts при этом сам же провоцируя их изменения

Pavel-Vladimirov Автор вопроса
Rain
массив это listOfAccaunts ? и вчем смысл второго ...

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

Pavel Vladimirov
смотри, есть у меня форма в которой создаётся новы...

ну и допустим ты запустил 2 последних диспатча, они переписали некторые значения в редаксе и ты в компонетах получил через селектор эти данные Но однако же что дальше ты пытаешь сделать?

Pavel Vladimirov
ну это я вроде понял. теперь пытаюсь запросы за об...

на 100% не уверен, но можно посмотреть что вообще возвращает dispatch через console.log есть у меня сомнения что он возвращает промис а если он его не возвращает то твои await сразу отработают и ждать ответа сервера код не будет

Pavel-Vladimirov Автор вопроса
Rain
на 100% не уверен, но можно посмотреть что вообще ...

судя из нетвока. options запросы посылаются в правильном порядке. а вот post запросы уже кто как

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

Pavel-Vladimirov Автор вопроса
Rain
тут не в запросе дело, а втом, что у тебя вторая с...

т.е. все вотэти цепочки запросов и преобразования надо делать внутри экшен крейтеров и санок?

Pavel Vladimirov
т.е. все вотэти цепочки запросов и преобразования ...

ну санок в экшн криэторах только код для запуска санки в onSubmit у тебя по идее должен быть только ОДИН вызов нужной санки а useEffect он тебе только усложнит бизнес логику

Pavel-Vladimirov Автор вопроса
Rain
ну санок в экшн криэторах только код для запуска ...

подскажи плиз ещё такой момент, вот у меня санка создания аккаунта, в респонсе приходят только 3 вот этих поля. где мне взять userId? или засунуть туда authMe запрос который вернёт userId?

Pavel Vladimirov
подскажи плиз ещё такой момент, вот у меня санка с...

вообще если ты ниже там диспатчишь санки для запроса к серверу это несколько проблемно по идее в санке dispatch он толлько для записи уже готовых значений в стэйт редакса через экшены если ты хочешь в санке несколько других санок последовательно выполнять, то тебе прийдется в них пробрасывать колбэки для получения ответов от сервера и наверно каждый такой вызов еще и в new Promise оборачивать если не хочешь callback hell я бы наверно в твоей ситуации просто апи для доступа к серверу напрямую бы вызывал последовательно

Pavel-Vladimirov Автор вопроса
Rain
вообще если ты ниже там диспатчишь санки для запро...

вот так получилось сделать. работает. респект за подсказки))🤘

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта