Все ли вы знаете о useSelector?

Поділитися
Вставка
  • Опубліковано 11 лип 2024
  • useSelector - это хук, который используется буквально каждый день. Кажется что мы должны знать о нем уже абсолютно все, но так ли это на самом деле?
    Исходники useSelector - github.com/reduxjs/react-redu...
    Исходники useSyncExternalStoreWithSelector - github.com/facebook/react/blo...
    Поддержать Айти Синяка можно здесь:
    UA-cam: / @it-sin9k
    boosty: boosty.to/sin9k
    Patreon: / itsin9k
    00:00 Анонс темы
    00:37 Исходники useSelector
    02:20 Исходники useSyncExternalStoreWithSelector
    05:53 Причина рендера
    06:55 Подведем итоги
    08:00 Подписывайтесь!
    Подписаться на канал: / @it-sin9k
    Twitter: / it_sin9k
    ________________
    Канал о Фронтенде, который хочется порекомендовать (telegram):
    t.me/frontendnoteschannel
    -------------------------
    Данный канал создан для инициирования бесед на различные темы IT сферы (социальные / технические), а также для тех кому короткая видео выжимка статьи, выступления на конференции или же просто личных мыслей, являются более удобным форматом

КОМЕНТАРІ • 79

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

    Круто! Спасибо за объяснение useSelector!

  • @user-md5mw1tp3e
    @user-md5mw1tp3e 2 роки тому +3

    Спасибо! Очень познавательно!

  • @bo_ver4628
    @bo_ver4628 2 роки тому +11

    Как всегда контент на высоте) Клево было бы послушать про reselect, а в частности про функцию createSelector из RTK. Спасибо!)

    • @it-sin9k
      @it-sin9k  2 роки тому +3

      Обязательно будет ролик про reselect!)

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

    Годный разбор, спасибо. Теперь я знаю как работает useSelector

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

    Спасибо за контент Александр!

  • @go_better
    @go_better 4 місяці тому

    Большое спасибо. Классное видео

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

    Отличный контент, не останавливайтесь)

    • @it-sin9k
      @it-sin9k  2 роки тому +1

      Нет планов останавливаться, только вперед!)

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

    Отличное и понятное объяснение. Подписка, лайк и жду много нового и полезного

  • @NefedoffYuriy
    @NefedoffYuriy 26 днів тому

    Спасибо за отличный видос!

  • @Victoria-ly2ij
    @Victoria-ly2ij 2 роки тому +2

    Спасибо! 💪

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

    Спасибо большое!

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

    Крутяк!!! Сразу подписка после просмотра.

    • @it-sin9k
      @it-sin9k  Рік тому +1

      Добро пожаловать на канал!

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

    Отличный разбор и что самое главное на основе этого разбора разработчики могут увидеть что «лезть в исходники» это очень полезно ;)

    • @it-sin9k
      @it-sin9k  2 роки тому +1

      Спасибо :)
      это одна из идей моих видео, помочь разработчикам не бояться исходников

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

    Большое спасибо, максимально полезный контент!

    • @it-sin9k
      @it-sin9k  2 роки тому

      Спасибо!) Если поделитесь с коллегами, будем очень признательны!)

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

    Оч. круто.
    спасибо!

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

    Спасибо за ваш канал)

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

    Интересный видос 😊

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

    Крутяк, спасибо!

  • @artemeelemann317
    @artemeelemann317 10 місяців тому

    Еще раз убедился в важности того, чтобы следить за тем когда значения сравниваются по ссылке в react. Спасибо за выпуск

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

    Спасибо! Теперь я знаю как работает useSelector

  • @TheEnd-hl4nh
    @TheEnd-hl4nh 2 роки тому +1

    Спасибо!

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

    Очень интересно, ждем reselect :)

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

    очень даже очень, спасибо

  • @dm.hol.3624
    @dm.hol.3624 2 роки тому +1

    Спасибо за науку.

    • @it-sin9k
      @it-sin9k  2 роки тому

      Спасибо за просмотр.

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

    useSelector с Reselect-ом отлично дополняет друг друга

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

    Офигенное видео!!!

    • @it-sin9k
      @it-sin9k  2 роки тому +1

      Не забудьте поделиться им с вашими коллегами, мы будем очень признательны!)

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

    Cool! Nice life hack

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

    Не знал , теперь знаю)))

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

    Теперь я знаю как работает useSelector

  • @user-zt9it2mh7i
    @user-zt9it2mh7i 10 місяців тому

    Теперь я знаю как работает useSelector )))

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

    в целом было полезно я думаю, я даже пока не знаю для чего нужен этот useSelector правда

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

    Тот момент когда не польщуешься редаксом(иногда лучше дрилить и композиции делать чем редакс), но видео отличное :)

    • @it-sin9k
      @it-sin9k  2 роки тому

      Спасибо) А какой стек у вас на проекте?)

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

    Лойс

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

    Спасибо за объяснение (⌒‿⌒)

  • @19n1ght
    @19n1ght 2 роки тому

    Спасибо! Хоть я и не использую Redux в повседневной разработке, все равно интересно узнавать подобные нюансы.

    • @it-sin9k
      @it-sin9k  2 роки тому

      А какой стек у вас используется?) доберусь и до вашего стека может в будущем)

    • @19n1ght
      @19n1ght 2 роки тому

      @@it-sin9k react + rxjs. Без сторонних стейт менеджеров

    • @it-sin9k
      @it-sin9k  2 роки тому

      Есть группа людей, кто очень любит rxjs с реактом использовать, но я к сожалению еще не видел ни одного проекта, как это все работает. Постараюсь еще получить этот опыт как-нибудь :)

    • @19n1ght
      @19n1ght 2 роки тому

      @@it-sin9k один раз попробовав rxjs уже не хочется от него отказываться :)
      Я не встречал хороших решений, которые позволяют "подружить" rxjs с реактом без редакса. Мы используем собственное решение. Возможно рано или поздно оно станет опенсорсным.

    • @it-sin9k
      @it-sin9k  2 роки тому +1

      круто) если выложите в open source пишите, я может обзор на него сделаю)

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

    крутой чел этот синяк)

    • @it-sin9k
      @it-sin9k  2 роки тому +2

      Не могу не согласиться)

  • @lacronts
    @lacronts 2 роки тому +5

    Насколько я понял, в видео рассмотрена еще не вышедшая версия react-redux 8.x, потому что в актуальной на данный момент версии 7.2.6 исходники другие))

    • @it-sin9k
      @it-sin9k  2 роки тому +3

      Это забавная история, как я готовил этот ролик. Сначала я изучал другие исходники useSelector. И когда уже собирался писать сценарий, react-redux накатил изменения) Я начал изучать заново, решил лучше рассказывать о актуальной версии. Закончил готовить ролик, записал аудио. И потом была React conf 20201, где они рассказали про новый АПИ 18-ой версии) короче поторопился я с выпуском темы)

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

    @АйТи Синяк нужен ваш совет) Я обычно делаю "корневую" ф-ю селектор для конкретного редюсера (selectNewsState = (state) => state.news;), далее его использую для других селекторов + createSelector из RTK (selectNewsIsLoading = createSelector(selectNewsState, (state) => state.isLoading). Насколько хорошо или плохо все селекторы создавать, используя createSelector? Я так понимаю под капотом reselect

    • @it-sin9k
      @it-sin9k  2 роки тому

      Про reselect будет отдельное видео, там постараюсь поднять этот вопрос)

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

    Теперь я tochno знаю как работает useSelector

  • @19n1ght
    @19n1ght 2 роки тому

    Неплохо было бы записать видео (может оно уже есть и я просто прошел мимо) на тему минусов Редакса. Я не о многословности (оно решается с помощью Redux Toolkit), а о том, что Редакс может создавать излишние связи между разными компонентами в проекте.

    • @it-sin9k
      @it-sin9k  2 роки тому +1

      Есть мысль такая, если есть более детальные примеры недостатков Redux я был бы рад их тоже добавить в будущее видео :) или пришлите на почту материалы, которые у вас есть) blue.sin9k@gmail.com

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

    Классное видео и много полезного
    Я вот только что-то туплю и не пойму 3ий пункт из части итогов
    Если мы из селектора не возвращаем новый объект, то что нам по хорошему нужно возвращать ?

    • @it-sin9k
      @it-sin9k  2 роки тому

      Вопрос немного сложно составлен. Суть третьего пункта в том, что всегда нужно возвращать прежнюю ссылку на объект / массив, если хотите избежать неожиданных рендеров. Как именно это работает я рассказывал на примере mapStateToProps. Там логика точно такая же. Посмотрите вот это видео (ua-cam.com/video/bqQI9rFm1ro/v-deo.html)

  • @NoName-oh9fh
    @NoName-oh9fh 2 роки тому +2

    Здравствуйте, у вас есть успехи в изучении паттерна Репозиторий и применений его в проектах React? Очень хотелось бы услышать ваше мнение об этом и увидеть применение его.

    • @it-sin9k
      @it-sin9k  2 роки тому

      Не первый раз, слышу в комментариях, что многим интересен этот паттерн. Я его не раз уже читал. Но честно говоря я использую немного другой подход. Тоже целый ряд абстракций и тому подобное :) Чтобы об этом паттерне рассказывать, нужно найти людей, которые в продакшене его используют и пообщаться)

  • @ElenaSemakova-o4w
    @ElenaSemakova-o4w 10 днів тому

    а как быть, когда в селектор нужен параметр? я знаю два способа передачи
    1) useSelector((state) => mySelector(state, param))
    2) useSelector(mySelector(param))
    Какой из них лучше практиковать или что вообще посоветуете в данном случае??
    Тот же вопрос при использовании createSelector

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

    А у нас в проекте столько полей требуется из стора, что приходится возвращать всегда объект, поэтому второй аргумент почти всегда используем
    const {items, activeItem} = useSelector(state => ({items: state.items, activeItem: state.activeItem}), shallowEqual);
    делать кучу useSelector тоже не очень, особенно когда некоторые поля используют одно общее поле, да и подписка на стор не бесплатная (shallowEqual тоже конечно).
    Про трюк с меморизацией, как я понимаю, его основная задача в том, чтобы не вызывать useSelector по рендеру компонента, вызванному естественным путем. Кажется не так критично, чтобы перестать писать анонимные функции в первом аргументе. На фоне того, что селектор вызывается на любое изменение стора, эта оптимизация кажется спичечной.

    • @it-sin9k
      @it-sin9k  2 роки тому

      Прикольно, кто-то использует второй параметр) я на нашем текущем проекте тоже столкнулся с той проблемой, что иногда нужно и 5-10 полей использовать. Мы использовали правда reselect, вероятно и не очень оправданно использовали

    • @user-px5no4vy9e
      @user-px5no4vy9e Рік тому +1

      Я однажды тоже был весьма удивлен, что деструктуризация объекта полученного из селектора может вызвать лишние рендеры (точнее не сама деструктуризация, а то что мы подписываемся на целый объект, а не только на свойства полученные через деструктуризацию). Но я просто делаю несколько useSelector - нечасто бывает больше 2-3, стараюсь декомпозировать компоненты. Нужно будет проверить как-нибудь, что быстрее - несколько useSelector или один, но со вторым параметром-функцией

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

    В чистом виде он ещё проще.
    function useSelector(selector){
    const store = useStore();
    const [state, setState] = useState(selector(store.getState()));
    useEffect(() => {
    return store.subscribe(() => {
    const result = selector(store.getState());
    if (!shallowequal(state, result)) {
    setState(result);
    }
    });
    }, [state]);
    return state;
    }

    • @it-sin9k
      @it-sin9k  2 роки тому

      как раз этой темы планировал коснуться в следующем видео)

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

    Мб у меня практики мало , но оч сложно..

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

    Круто! Спасибо за объяснение useSelector!

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

    Как всегда контент на высоте) Клево было бы послушать про reselect, а в частности про функцию createSelector из RTK. Спасибо!)

    • @it-sin9k
      @it-sin9k  2 роки тому

      Спасибо!) Есть план сделать видео про createSelector чуть позже)

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

    Теперь я знаю как работает useSelector

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

    Теперь я знаю как работает useSelector

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

    Теперь я знаю как работает useSelector