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

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

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

28 ответов

6 просмотров

гм... Ну типа два запроса делать надо? первым ты получаешь 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
вообще если ты ниже там диспатчишь санки для запро...

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

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

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

А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта