Size: a a a

React — русскоговорящее сообщество

2021 March 09

V

Veli in React — русскоговорящее сообщество
бесконечная рекурсия
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Yevhen
Переслано от Yevhen
Есть тут гении React-a? Такой вопрос: мне нужно получить данные с апишки, если я делаю запрос с помощью axios и сохраняю в useState, то у меня так называемый "memory leak", память забывается до предела. Что с этим делать понятия не имею
Вы написали бесконечный цикл )
источник

С

Сергей in React — русскоговорящее сообщество
Vladimir Klimov
Потому, что надо возвращать что-то из колбека в setState
Вы возвращаете undefined
Спасибо
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Yevhen
Только начал изучать реакт
setState вызывает ререндер компонента, после которого всегда вызывается хук useEffect, внутри которого вы опять пишете setState
Вам надо так написать хук useEffect, чтобы он срабатывал не при каждом новом апдейте компонента
источник

V

Veli in React — русскоговорящее сообщество
чтож, мы гении реакта получается 😎
источник

AB

Anatoly Berbeka in React — русскоговорящее сообщество
Подскажите советом, пожалуйста.
Есть react + redux, в redux хранится информация о пользователе, в том числе accessToken и refreshToken (потому что access протухающий). Есть ApiService, в котором создаётся и отдаётся axios с baseUrl + timeout.
Суть проблемы: как отслеживать протухший токен и обновлять его?
Я в итоге сделал в actions отдельный экшен, checkTokenAndUpdate, который:
1. идёт в localStorage за юзером (потому что я не нашёл другого способа в экшене получить доступ к данным в стейте redux, а в каждый экшен вручную пихать токен неудобно)
2. проверяет срок жизни токена, если он просрочен - отправляет запрос на обновление токена (другой экшен). Если всё ок - отдаёт accessToken обратно. Если же обновить не удалось - выкидывает ошибку и диспатчит USER_LOGOUT.
Может есть какие-то более человеческие способы делать такие вещи? Или это норм вариант? Просто мне не очень нравится, что у меня постоянно дублируются 5 строк в каждом экшене, где эндпоинт требует токен.
источник

V

Veli in React — русскоговорящее сообщество
Anatoly Berbeka
Подскажите советом, пожалуйста.
Есть react + redux, в redux хранится информация о пользователе, в том числе accessToken и refreshToken (потому что access протухающий). Есть ApiService, в котором создаётся и отдаётся axios с baseUrl + timeout.
Суть проблемы: как отслеживать протухший токен и обновлять его?
Я в итоге сделал в actions отдельный экшен, checkTokenAndUpdate, который:
1. идёт в localStorage за юзером (потому что я не нашёл другого способа в экшене получить доступ к данным в стейте redux, а в каждый экшен вручную пихать токен неудобно)
2. проверяет срок жизни токена, если он просрочен - отправляет запрос на обновление токена (другой экшен). Если всё ок - отдаёт accessToken обратно. Если же обновить не удалось - выкидывает ошибку и диспатчит USER_LOGOUT.
Может есть какие-то более человеческие способы делать такие вещи? Или это норм вариант? Просто мне не очень нравится, что у меня постоянно дублируются 5 строк в каждом экшене, где эндпоинт требует токен.
ловить 401 ошибку и слать запрос на рефреш
источник

V

Veli in React — русскоговорящее сообщество
устарел ли токен знает только бек. Хотя вы, в принципе, можете сами расшифровать JWT и получить эту дату, если вы знаете, как быстро устаревает токен. И при каждом запросе проверять, не устарел ли токен
источник
2021 March 10

V

Veli in React — русскоговорящее сообщество
или бек может в токен положить дату устаревания. Обычно там, вроде, только дата создания
источник

DN

Drew Naumenko in React — русскоговорящее сообщество
вот это превая ходка в компонент
я начала делаю запрос с сurrentPage  =1

а потом его увеличиваю на 1 ,  чтобы следующий скрол сделать по запросу уже с  другим оффсет
но в упор не вижу почему оно не выгребает актуальное значение currentPage , а хранит в себе первоначальное значение.
источник

V

Veli in React — русскоговорящее сообщество
Anatoly Berbeka
Подскажите советом, пожалуйста.
Есть react + redux, в redux хранится информация о пользователе, в том числе accessToken и refreshToken (потому что access протухающий). Есть ApiService, в котором создаётся и отдаётся axios с baseUrl + timeout.
Суть проблемы: как отслеживать протухший токен и обновлять его?
Я в итоге сделал в actions отдельный экшен, checkTokenAndUpdate, который:
1. идёт в localStorage за юзером (потому что я не нашёл другого способа в экшене получить доступ к данным в стейте redux, а в каждый экшен вручную пихать токен неудобно)
2. проверяет срок жизни токена, если он просрочен - отправляет запрос на обновление токена (другой экшен). Если всё ок - отдаёт accessToken обратно. Если же обновить не удалось - выкидывает ошибку и диспатчит USER_LOGOUT.
Может есть какие-то более человеческие способы делать такие вещи? Или это норм вариант? Просто мне не очень нравится, что у меня постоянно дублируются 5 строк в каждом экшене, где эндпоинт требует токен.
по поводу вашей проблемы - используйте интерсепторы либо же делайте это в какой-то обертке над вашим http-клиентом, если нет интерсепторов. Интерсепторы есть, к примеру, в axios
источник

Y

Yevhen in React — русскоговорящее сообщество
Разобрался, всем большое спасибо ❤️
источник

AB

Anatoly Berbeka in React — русскоговорящее сообщество
Veli
устарел ли токен знает только бек. Хотя вы, в принципе, можете сами расшифровать JWT и получить эту дату, если вы знаете, как быстро устаревает токен. И при каждом запросе проверять, не устарел ли токен
У нас не jwt, но срок жизни токена я знаю, его присылает сервер. Просто помимо устаревания токен может быть ещё и изменён (другой вход с другого устройства, например; бэк позволяет только существование одного токена и одной сессии).
Но мне в экшене в любом случае надо как-то доставать токен. Просто мне не нравится лазить в localStorage за токеном, оно же тоже аффектит производительность так или иначе
источник

X

Xxx in React — русскоговорящее сообщество
Drew Naumenko
вот это превая ходка в компонент
я начала делаю запрос с сurrentPage  =1

а потом его увеличиваю на 1 ,  чтобы следующий скрол сделать по запросу уже с  другим оффсет
но в упор не вижу почему оно не выгребает актуальное значение currentPage , а хранит в себе первоначальное значение.
Уже ответили, так работает useEffect, почитайте внимательнее доки.

Если вы хотите иметь доступ к самому свежему значению переменной, она должна быт в dependencies useEffect.
Иначе там будет значение на момент инициализации компонента
источник

AB

Anatoly Berbeka in React — русскоговорящее сообщество
Veli
по поводу вашей проблемы - используйте интерсепторы либо же делайте это в какой-то обертке над вашим http-клиентом, если нет интерсепторов. Интерсепторы есть, к примеру, в axios
Я пробовал, я не смог в сервис с axios передать стейт. И диспатчить экшены из него тоже, я с этим провозился кучу времени и не получил работающего варианта. Примеры нагуглить не смог, если кто-то может ткнуть в пример - буду крайне признателен
источник

V

Veli in React — русскоговорящее сообщество
Anatoly Berbeka
Я пробовал, я не смог в сервис с axios передать стейт. И диспатчить экшены из него тоже, я с этим провозился кучу времени и не получил работающего варианта. Примеры нагуглить не смог, если кто-то может ткнуть в пример - буду крайне признателен
импортируете стор и делаете с ним что угодно) store.dispatch/store.getState
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Anatoly Berbeka
Я пробовал, я не смог в сервис с axios передать стейт. И диспатчить экшены из него тоже, я с этим провозился кучу времени и не получил работающего варианта. Примеры нагуглить не смог, если кто-то может ткнуть в пример - буду крайне признателен
Вам вообще не надо знать ничего о сторе внутри axios интерцепторов и т.п.
источник

V

Veli in React — русскоговорящее сообщество
Vladimir Klimov
Вам вообще не надо знать ничего о сторе внутри axios интерцепторов и т.п.
как тогда лучше организовать мидлвар, который будет работать на каждый запрос и разлогинивать при 401, к примеру, учитывая, что токен хранится в сторе?
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Veli
как тогда лучше организовать мидлвар, который будет работать на каждый запрос и разлогинивать при 401, к примеру, учитывая, что токен хранится в сторе?
Не хранить токен в сторе
источник

V

Veli in React — русскоговорящее сообщество
а где хранить?
источник