Size: a a a

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

2020 September 25

VL

Vlad Lavko in React — русскоговорящее сообщество
Vladimir Klimov
А какие альтернативы? Как вы узнаете в компоненте, что что-то загружается, или уже загрузилось, или упало с ошибкой ?
Просто оберну в компоненте dispatch в try-catch и установлю внутри новое состояние моего лоадера
источник

VL

Vlad Lavko in React — русскоговорящее сообщество
Roman Usherenko
для того, чтоб показать индикатор загрузки. где ты его еще будешь хранить?
Ну так а почему бы не хранить индикатор в самом компоненте?
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
Vlad Lavko
Ну так а почему бы не хранить индикатор в самом компоненте?
ну а как ты его будешь хранить, если запрос начинается в action, а не в компоненте?
источник

VL

Vlad Lavko in React — русскоговорящее сообщество
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null)
const async operation = () => {
     try {
       setLoading(true);
       await dispatch({type: 'A'});
       console.log('success')
     } catch (error) {
       setError();
     } finally {
       setLoading(false);
     }
   }

Типа вот так.
источник

VL

Vlad Lavko in React — русскоговорящее сообщество
Roman Usherenko
ну а как ты его будешь хранить, если запрос начинается в action, а не в компоненте?
Чем плох варинт написаный мной выше?
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
Vlad Lavko
Чем плох варинт написаный мной выше?
это протекание логики. и тебе придется внутри своих экшнов делать throw, а это уже неожиданные вещи
источник

VL

Vlad Lavko in React — русскоговорящее сообщество
Roman Usherenko
это протекание логики. и тебе придется внутри своих экшнов делать throw, а это уже неожиданные вещи
Зачем внутри экшена делать throw, если я не буду его оборачивать в try-catch? Если в нем произойдет ошибка, то она попадет прямиком в компонент.
источник

SL

Sergey Lukashev in React — русскоговорящее сообщество
Vlad Lavko
Чем плох варинт написаный мной выше?
вместо того, чтобы хранить всю асинк логику в одному месте, ты размазываешь ее по двум. зачем?
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
Vlad Lavko
Зачем внутри экшена делать throw, если я не буду его оборачивать в try-catch? Если в нем произойдет ошибка, то она попадет прямиком в компонент.
обычно так не делается. это размазывание логики
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
при использовании редакса у тебя компоненты исключительно "отображение состояния", они не имеют никакой логики, кроме логики отображения
источник

DK

Daniel Karuna in React — русскоговорящее сообщество
Vlad Lavko
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null)
const async operation = () => {
     try {
       setLoading(true);
       await dispatch({type: 'A'});
       console.log('success')
     } catch (error) {
       setError();
     } finally {
       setLoading(false);
     }
   }

Типа вот так.
а мне нравится такое решение, можно будет в будущем в саспенс завернуть чтоб вообще не хендлить setLoading
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
Daniel Karuna
а мне нравится такое решение, можно будет в будущем в саспенс завернуть чтоб вообще не хендлить setLoading
тогда там не будет редакса
а когда редакс будет поддерживать suspense for data fetching - тогда и поговорим)
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
Тебе и хук фетча нравится
источник

DT

Daniil Tchernyavsky in React — русскоговорящее сообщество
Это не значит что хорошо
источник

MK

Maxim Koylo in React — русскоговорящее сообщество
Roman Usherenko
тогда там не будет редакса
а когда редакс будет поддерживать suspense for data fetching - тогда и поговорим)
то есть никогда не поговорим?)
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
Maxim Koylo
то есть никогда не поговорим?)
нет почему же) я реально верю, что так и будет. ну где-то года через полтора
источник

A

Andrey in React — русскоговорящее сообщество
Daniil Tchernyavsky
Тебе и хук фетча нравится
не всем же коллег кодом радовать 🌝
источник

VK

Vladimir Klimov in React — русскоговорящее сообщество
Vlad Lavko
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null)
const async operation = () => {
     try {
       setLoading(true);
       await dispatch({type: 'A'});
       console.log('success')
     } catch (error) {
       setError();
     } finally {
       setLoading(false);
     }
   }

Типа вот так.
Если так - то зачем редакс вообще? Возьмите какой-то react-query для запросов)
А так вы управление состояния запросом размазали между компонентом и стором
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
^
источник

RU

Roman Usherenko in React — русскоговорящее сообщество
я на проекте периодически от таких людей отбиваюсь. и к сожалению сам был причиной их появления. написал глобальный компонент с двумя кнопками для модала. и там как раз await и все дела

потом оказалось что это хоть и кажется поначалу удобно - заставляет извращаться и писать "неправильные" экшны)
источник