Redux-Saga React Полный Курс. Урок 2. Эффекты в деталях. Архитектура саг. React Router + Redux Saga.

Поділитися
Вставка
  • Опубліковано 3 лип 2024
  • Это второй урок из цикла обучающих видео о Redux-Saga на русском.
    Первый урок: • Redux-Saga React Полны...
    Код c урока: github.com/maks1mp/redux-saga...
    Redux-Saga - это middleware для redux, цель которой - сделать асинхронные операции в React приложениях: эффективными для выполнения, легко управляемыми и тестируемыми.
    Ключевая концепция редакс саги - это создать отдельный поток в нашем приложении, который несет полную ответственность за все побочные эффекты.
    👉 Менторство, обратная связь и поддержка / wisejs
    Для полного понимания нужно смотреть видео полностью.
    Таймкоды:
    00:00 - Начало, что будет рассмотренно в видео
    00:31 - Резюмируем первый урок Saga Watcher / Saga Worker / Effects
    01:53 - Обзор начального кода приложения уже подключен Redux + Redux-Saga
    02:44 - Организация rootSaga в приложении
    04:18 - Подключаем саги способ №1 (yield + array + all для вызова)
    05:17 - Подключаем саги способ №2 (yield + array + fork + all для вызова)
    06:09 - Подключаем саги способ №3 (fork для каждой саги)
    06:31 - Почему первые 3 способа могут быть проблемой + способ подключения №4
    07:41 - Способ подключения №5 - автоматический рестарт saga
    09:30 - Эффект all
    10:48 - Асинхронные действия / запросы при входе в приложение
    12:40 - Запрос fetch из саги с помощью call
    14:27 - Загрузка данных по переходу на страницу + подключение react-router
    21:01 - Эффект apply
    23:02 - Запрос по переходу на страницу: хороший способ + подключение connected-react-router
    32:01 - Запрос по действию пользователя take + call
    36:44 - Запрос по действию пользователя take + fork + call
    38:06 - takeLatest и его проблема
    39:07 - прокачиваем takeLatest для отмены запросов
    41:43 - Эффект actionChannel
    44:28 - Заключение
    Приятного просмотра! Буду благодарен за поддержку в виде комментария и лайка)
    ✔️Если хочешь изучать программирование со мной, не забудь подписаться :)
    ua-cam.com/channels/Oxq.html...
    ✔️Мой телеграм канал: t.me/joinchat/RVq-cmt6n1SJRS7Z
    #reduxsaga #reactreduxsaga #reduxsagaeffects #редакссага #реактредакссага #редакссаганарусском

КОМЕНТАРІ • 113

  • @avzuykov1467
    @avzuykov1467 2 роки тому +15

    Лучшее, что я видел за последний месяц

  • @Darina9797
    @Darina9797 2 роки тому +8

    Отличное видео! Все доступно и подробно изложено. Спасибо!

  • @ansaganie
    @ansaganie 2 роки тому

    Спасибо большое за ценный и в то же время бесплатный и полезный контент!!!

  • @deadstrike
    @deadstrike 2 роки тому +1

    Спасибо большое) Настолько без воды и по делу что даже не верится.

  • @elbeck4937
    @elbeck4937 Рік тому

    Очень круто, все разложено по полочкам. Спасибо большое за этот курс!

  • @blgarOk
    @blgarOk 2 роки тому

    Отличный курс по saga. Всё разжевано и с примерами.

  • @konstantinvoronin4687
    @konstantinvoronin4687 2 роки тому +1

    Спасибо, дружище! Продвижения канала, больше подписчиков тебе и добра!!!

  • @SAN4EZG4MING
    @SAN4EZG4MING 2 роки тому +13

    Если вдруг кто-то, как и я не хочет использовать прошлые версии библиотек, а юзать react-router 6 версии, то до 23 минуты забейте на history и сделайте с обычным BrowserRouter (без history).
    Далее уже, вместо connected-react-router используйте библиотеку redux-first-history. Они очень похожи + на npm хорошая инструкция по запуску, с этим проблем не будет.

    • @TheLevius
      @TheLevius Рік тому +4

      Этот коммент нужно в закреп. Реально кучу времени сэкономит.
      P.S. А вообще это конечно смех как часто выходят ломающие изменения, пол года прошло - контент фактически в помойку, хотя он и неплох

    • @user-xk2qv7rn9x
      @user-xk2qv7rn9x Рік тому

      Добра тебе хороший человек!

    • @eugene5008
      @eugene5008 Рік тому

      вот такой импорт может помочь для тайпскрипта: import { HistoryRouter as Router } from "redux-first-history/rr6"

  • @user-rp6kj9jd1w
    @user-rp6kj9jd1w 2 роки тому

    Очень доходчиво. Огромное спасибо за труд!🙏

  • @aleksandryudaiev9673
    @aleksandryudaiev9673 2 роки тому

    Спасибо за курс. Видео в топ!! Redux-Saga React

  • @user-xq3ok6cn1o
    @user-xq3ok6cn1o 3 роки тому

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

    • @wisejs
      @wisejs  3 роки тому

      Спасибо за коммент!

  • @nilsen1879
    @nilsen1879 3 роки тому +4

    Спасибо за видео. Ещё не смотрел, но исходники глянул и я понял как реализовать логику слежки за роутами по-другому. Я слишком сложно сделал, а тут все делает библиотека за тебя. Круто !

    • @nilsen1879
      @nilsen1879 3 роки тому

      С отпуска приеду и буду осваивать новый материал!

  • @BarrBozzO
    @BarrBozzO 2 роки тому

    спасибо за годноту, товарищ!

  • @denisoleksyuk5346
    @denisoleksyuk5346 2 роки тому

    крутые уроки по саге!

  • @1Malak16
    @1Malak16 3 роки тому +2

    Спасибо бро! Подписался после первой же минуты видео.

    • @wisejs
      @wisejs  3 роки тому

      Спасибо за комментарий и подписку!

  • @alexanderkazakov1745
    @alexanderkazakov1745 2 роки тому

    Спасибо за отличное видео, удалось легко погрузиться в суть.
    Двойной рендер (проблема двойного запроса) лечит перемещение внутрь

  • @sengokusky1515
    @sengokusky1515 2 роки тому

    Просто бомба!

  • @RomiLLLLA
    @RomiLLLLA 2 роки тому

    очень полезные видео

  • @alex_zameta
    @alex_zameta 2 роки тому

    Спасибо автору топовое видео по Саге))

    • @wisejs
      @wisejs  2 роки тому

      Спасибо за обратную связь)

  • @mikhailstepanishchev283
    @mikhailstepanishchev283 3 роки тому

    Космос,спасибо ! Redux-Saga

  • @artem-koltunov
    @artem-koltunov 2 роки тому +1

    Спасибо

  • @STiGMA85X
    @STiGMA85X 2 роки тому

    Бро у тебя талант, развивай канал

  • @user-bj2hv2rt6f
    @user-bj2hv2rt6f 3 роки тому +1

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

    • @wisejs
      @wisejs  3 роки тому +1

      Спасибо за комментарий! Генераторы вообще не сильно дружат с тайпскриптом. Это известный лимит тайпскрипта. Я покажу пример которым сам пользуюсь.

  • @spadar1602
    @spadar1602 2 роки тому +1

    Комент для продвижения, мега крутой контент.

    • @wisejs
      @wisejs  2 роки тому

      спасибо🔥🔥🔥

  • @denmccormik7654
    @denmccormik7654 2 роки тому +1

    Честно, очень сложно лично мне все это понять
    когда разбирал thunk, toolkit было спокойно
    тут поплыл
    в любом случае, спасибо, объяснения достойные

    • @denmccormik7654
      @denmccormik7654 2 роки тому +2

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

  • @BlindPewRus
    @BlindPewRus Рік тому

    Коммент благодарности и поддержки

  • @fedordostoevskiy4209
    @fedordostoevskiy4209 3 роки тому +1

    И снова Superman !

  • @user-lj7yk3kl3f
    @user-lj7yk3kl3f 2 роки тому

    хорошие кейсы по оптимизации

  • @user-yu7gm4df3f
    @user-yu7gm4df3f 3 роки тому +5

    полегче приятель идешь как паравоз ) .. респект !

    • @wisejs
      @wisejs  3 роки тому

      Спасибо 😉

  • @serhiiverba4
    @serhiiverba4 2 роки тому

    лайк

  • @dali5010
    @dali5010 2 роки тому

    good

  • @miloman1995s
    @miloman1995s 2 роки тому

    кайф

  • @user-sk7jn3mf5h
    @user-sk7jn3mf5h 2 роки тому +1

    Сделай видос по сагах с typescript

  • @user-cm9ff1ej9c
    @user-cm9ff1ej9c 2 роки тому

    Я не пойму почему так мало лайков по отношению к просмотрам. Качественно все рассказывается и разжевывается!

    • @wisejs
      @wisejs  2 роки тому +1

      Спасибо за поддержу!

    • @user-vv6jx8qg4v
      @user-vv6jx8qg4v 2 роки тому

      Люди лентяи.

  • @Fs-xj2gu
    @Fs-xj2gu 2 роки тому +1

    СДЕЛАЙ ВИДЕО ПО WebStorm - optimize imports, всякие фишки итд

  • @user-dd9fp1sd9d
    @user-dd9fp1sd9d 2 роки тому

    Все просто и по полкам.
    Саги реально мощная штука!
    Спасибо.
    P.S. Может, стОит через инсту продвигать свой канал?

  • @Romul3003
    @Romul3003 2 роки тому

    Повторював все як у тебе, короче, з react v18 react-router-dom v5 в мене не працював, динамічно не рендерив сторінки, тільки через перезавантаження, сильно не ліз туди розбиратися, що до чого, але знизивши версію реакта до 17 та ще декіла пакетів понизив версію, як в твоєму package.json - все завелось, дякую за класний матеріал

    • @wisejs
      @wisejs  2 роки тому +1

      Дякую за підтримку 🤘Якщо розберешся що не так з 18 і 6м роутером - відправляй ПР :)

    • @Romul3003
      @Romul3003 Рік тому +1

      @@wisejs судячи із коментів в issues в репі connected-react-router, його перестали мейнтейнити github.com/supasate/connected-react-router/issues
      Як альтернативу пропонують redux-first-history github.com/salvoravida/redux-first-history
      Я його потикав, сетап трохи інший, але все працює так само. І працює з версіями react 18 та react-router-dom 6

  • @user-xu3bh5bm1m
    @user-xu3bh5bm1m 2 роки тому

    Видео очень интересное. Есть правда нюанс на который я убил кучу времени так как я новичок в этом всем. С пятой версией Connected - React - Router код не работает и нужно делать откат на четвертую версию. Ну и быстро все конечно) Мне конечно по барабану на скорость, я на паузах код в IDE переписываю чтоб лучше доходило, тут главное с асинхронностью тему понять. Спасибо большое автору за его труд!!! Как пожелание от новичка - хотелось бы чтоб на мелочи больше внимания уделялось... хотя те кто полез в saga уже не совсем новички)

    • @wisejs
      @wisejs  2 роки тому

      Спасибо за комментарий! А вы с первого урока смотрите?

    • @user-xu3bh5bm1m
      @user-xu3bh5bm1m 2 роки тому

      @@wisejs Да. Без него было б вообще не понятно. Собираю общую картину как из пазлов. Там кусок, тут кусочек. Есть просто желание профессию сменить. Вот и учусь. Про мелочи - это я так на будущее. Не про это видео.

    • @wisejs
      @wisejs  2 роки тому

      @@user-xu3bh5bm1m самостоятельно обучаетесь? Как долго уже изучаете front-end?

    • @user-xu3bh5bm1m
      @user-xu3bh5bm1m 2 роки тому

      @@wisejs Получается что самостоятельно. Попытки обучения начались с начала года. Но я долго болел - почти 4 месяца и было не до этого. Начал с питона и уже 3 месяца как переключился на JS, Node, Frontend и пока не углубленно BackEnd на Express и MongoDB.

    • @wisejs
      @wisejs  2 роки тому

      @@user-xu3bh5bm1m больше Бекендом интересуетесь? Почему с питона на js перешли?

  • @vazgenaleksanyan2929
    @vazgenaleksanyan2929 2 роки тому +1

    connected-react-router что вместо этого можно использовать?

  • @user-fj9fw7tu3i
    @user-fj9fw7tu3i 2 роки тому

    если использовать apply вместо call, то параметры передаются просто через запятую, а не в массиве [ ] , но в call понятно куда писать аргументы (call([context, func], ...args)), а в случае с apply куда записывать аргументы, 3-им параметром в виде массива ? заранее спасибо ) видео ТОП !)

  • @user-yg8nh2ek6w
    @user-yg8nh2ek6w 2 роки тому

    ошибка при добавлении линка: Could not find router reducer in state tree, it must be mounted under "router"

  • @irinamartsulevich5178
    @irinamartsulevich5178 Рік тому +1

    Использовала вместо connected-react-router используйте библиотеку redux-first-history, как писали в комментах. React 18 + React-router-dom v6 💥

    • @Haskiken4370
      @Haskiken4370 Рік тому

      Ни как не мог найти где пофиксить connected react router . Это сообщение просто спасение. Спасибо

  • @denmccormik7654
    @denmccormik7654 2 роки тому

    не могу понять для чего нам нужен this в call и apply, почему мы не можем сделать yield request.json(), почему нам нужен эффект - только для блокировки?

  • @ansaganie
    @ansaganie 2 роки тому

    redux saga redux-saga middleware react saga effects редакс-сага реакт

  • @spadar1602
    @spadar1602 2 роки тому +2

    Ребят если у кого ошибка: Uncaught Could not find router reducer in state tree, it must be mounted under "router", понизьте версию history - `npm install history@4.10.1`

    • @user-ku2sn1wz1c
      @user-ku2sn1wz1c 2 роки тому

      увы, но уже не в 22 году... это не сработает

  • @dastanabildaev1644
    @dastanabildaev1644 2 роки тому +1

    что делать с react-router-dom v6?

  • @user-cb8nd7yk5u
    @user-cb8nd7yk5u 3 місяці тому

    всего 3 урока в серии Redux-Saga?

  • @indigosay
    @indigosay 2 роки тому

    Привет! Чтобы цикл тротлился после неудачи, а то в случае ошибки он постоянно крутит цикл и stack overflow:
    Я пробовал так, но не работает:
    const retrySagas = sagas.map((saga) => {
    return spawn(function* () {
    while (true) {
    try {
    yield call(saga) // Если сага дохнет, то запускается заново
    break
    } catch (error) {
    console.log(error)
    yield delay(2000)
    }
    }
    })
    })

    • @wisejs
      @wisejs  2 роки тому

      Этот код как раз и предназначен для бесконечных перезапусков, а по дефолту сага в которой свалилась ошибка больше не сработает (если её никак не хендлить)

  • @fanshtorm1735
    @fanshtorm1735 2 роки тому

    36:47 почему нельзя было использовать takeEvery?

    • @wisejs
      @wisejs  2 роки тому +1

      Можно. Все сделано в образовательных целях.

  • @romanmed9035
    @romanmed9035 2 роки тому

    можно ли ссылку на 3е видео добавить в описание?

    • @wisejs
      @wisejs  2 роки тому

      можна. ще можна користуватись плей листами)

    • @romanmed9035
      @romanmed9035 2 роки тому

      @@wisejs извините, но не нашел.

    • @romanmed9035
      @romanmed9035 2 роки тому

      @@wisejs спасибо, нашел.

  • @5Tarke
    @5Tarke 3 роки тому

    дякую за ваше відео! Могли б ви показати як організувать redux-saga і web-socket?

    • @wisejs
      @wisejs  3 роки тому +1

      Дякую за коментар! Так, буде у майбутніх відео.

  • @yourbadapple
    @yourbadapple 2 роки тому

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

  • @user-ei5zw4dn8q
    @user-ei5zw4dn8q 2 роки тому +1

    connected-react-router не поддерживает react-router@6
    так что снизьте до react-router@5

    • @vazgenaleksanyan2929
      @vazgenaleksanyan2929 2 роки тому

      а нет другого выхода?

    • @user-ei5zw4dn8q
      @user-ei5zw4dn8q 2 роки тому

      @@vazgenaleksanyan2929 я не нашла, мб уже альтернативу в доку добавили нормальную

    • @vazgenaleksanyan2929
      @vazgenaleksanyan2929 2 роки тому

      @@user-ei5zw4dn8q жалко, не хотелось поменять роутинг. Наверное можно как то решит эту проблему таким образом. В главном компоненте отслеживать history, с помощью useEffect и дипатчить в редакс. Так вместо много useEffect будет один.

  • @user-iu4xu2kx6i
    @user-iu4xu2kx6i 2 роки тому +1

    Switch вже не прапрацює замість нього Routes в версії 6+, імпорт Router з react-router якусь діч видає, хоча в кінці він замінений, в документації базовий приклад з BrowserRouter з react-router-dom, чи я щось не так роблю, бо з Router з react-router аплікація падає, потипу цього працює





    і в Route необхідно element передавати, старий код на 17:35 актуальний, чи модулі змінились?

    • @wisejs
      @wisejs  2 роки тому +1

      Відео зроблено з v5.

  • @motolife4900
    @motolife4900 2 роки тому

    Как распараллелить массив запросов fetch? Допустим 100 запросов

    • @wisejs
      @wisejs  2 роки тому

      В цикле и дождаться Promise.all

    • @motolife4900
      @motolife4900 2 роки тому

      @@wisejs я это пытаюсь сделать на уровне saga. создаю масив тасков (каждый таск обернуть fork) и передаю в эффект all, должны вроде все таски выполнится одновременно, а по факту очередь(

  • @user-dy8lp2fr1d
    @user-dy8lp2fr1d 2 роки тому

    Ничего не понятно, файлы поназывал index.js и говорить преходим туда, преходим сюда, углубления вообще нет, просто описываешь шаги, а что и зачем, объяснения ноль

    • @wisejs
      @wisejs  2 роки тому

      Вы смотрели первый урок?

    • @ohhhucc
      @ohhhucc 2 роки тому +1

      Надо внимательнее смотреть. Там же всё грамотно по директориям раскидано, по-моему всё очевидно и понятно.

  • @indigosay
    @indigosay 2 роки тому

    Как по-другому написать call([request, request.json]), есть решение?

    • @wisejs
      @wisejs  2 роки тому

      Да, можно еще так: apply(request, request.json)