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

แชร์
ฝัง
  • เผยแพร่เมื่อ 21 พ.ย. 2024

ความคิดเห็น • 80

  • @andrewsam224
    @andrewsam224 ปีที่แล้ว +1

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

    • @it-sin9k
      @it-sin9k  ปีที่แล้ว +1

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

  • @Alex__88
    @Alex__88 ปีที่แล้ว

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

  • @ruslankosh1688
    @ruslankosh1688 2 ปีที่แล้ว +2

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

  • @artemeelemann317
    @artemeelemann317 ปีที่แล้ว

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

  • @aaamre4840
    @aaamre4840 2 ปีที่แล้ว +2

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

  • @ОлегСелин-ш9ы
    @ОлегСелин-ш9ы 2 ปีที่แล้ว +3

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

  • @muratakmamedau7328
    @muratakmamedau7328 2 ปีที่แล้ว +1

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

  • @Victoria-ly2ij
    @Victoria-ly2ij 2 ปีที่แล้ว +2

    Спасибо! 💪

  • @aleksandrzelenskiy4000
    @aleksandrzelenskiy4000 2 ปีที่แล้ว +2

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

  • @alexeyshaykov
    @alexeyshaykov 2 ปีที่แล้ว +1

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

  • @srjoyme2525
    @srjoyme2525 2 ปีที่แล้ว +2

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

  • @geniamasanin8322
    @geniamasanin8322 2 ปีที่แล้ว +3

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +1

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

  • @Retruntobase
    @Retruntobase 2 ปีที่แล้ว +11

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +3

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

  • @TheEnd-hl4nh
    @TheEnd-hl4nh 2 ปีที่แล้ว +1

    Спасибо!

  • @Илья-ж8ч8о
    @Илья-ж8ч8о 2 ปีที่แล้ว +1

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

  • @КотМатроскин-х9ь
    @КотМатроскин-х9ь 2 ปีที่แล้ว

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

  • @TheTexPro
    @TheTexPro ปีที่แล้ว

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

  • @Pne-b8z
    @Pne-b8z ปีที่แล้ว

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

  • @go_better
    @go_better 9 หลายเดือนก่อน

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

  • @osxenon
    @osxenon 2 ปีที่แล้ว +1

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @dm.hol.3624
    @dm.hol.3624 2 ปีที่แล้ว +1

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @kspshnik
    @kspshnik 2 ปีที่แล้ว

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

  • @ГарикВонави
    @ГарикВонави 2 ปีที่แล้ว +1

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +1

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

  • @hikarukun5126
    @hikarukun5126 2 ปีที่แล้ว

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

  • @СергейШепс-э7п
    @СергейШепс-э7п 2 ปีที่แล้ว

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

  • @sergiogusto
    @sergiogusto 2 ปีที่แล้ว

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

  • @eugeneperekopskyi5857
    @eugeneperekopskyi5857 2 ปีที่แล้ว +1

    Cool! Nice life hack

  • @SuleimanAliiev
    @SuleimanAliiev 2 ปีที่แล้ว

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

  • @dmitriybraginets6750
    @dmitriybraginets6750 2 ปีที่แล้ว

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +1

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

  • @Владимир.П-е9о
    @Владимир.П-е9о 2 ปีที่แล้ว +2

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

    • @ДенисКаленик-н1м
      @ДенисКаленик-н1м 2 ปีที่แล้ว +1

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

    • @R1taz
      @R1taz 3 หลายเดือนก่อน

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

  • @koreikin
    @koreikin 2 ปีที่แล้ว +1

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

  • @from_brest2631
    @from_brest2631 2 ปีที่แล้ว +1

    Лойс

  • @denistatarinov5395
    @denistatarinov5395 2 ปีที่แล้ว +1

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +2

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

  • @JSCoffeeBreak
    @JSCoffeeBreak 2 ปีที่แล้ว

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

  • @_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 ปีที่แล้ว

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

  • @almazkaliyev
    @almazkaliyev 2 ปีที่แล้ว +2

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @lacronts
    @lacronts 2 ปีที่แล้ว +5

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +3

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

  • @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 пишите, я может обзор на него сделаю)

  • @GivisZurabovich
    @GivisZurabovich 2 ปีที่แล้ว +2

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @ElenaSemakova-o4w
    @ElenaSemakova-o4w 4 หลายเดือนก่อน

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

  • @_iGer
    @_iGer 2 ปีที่แล้ว +1

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @NoName-oh9fh
    @NoName-oh9fh 2 ปีที่แล้ว +2

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @ВиталийКузнецов-щ3т7й
    @ВиталийКузнецов-щ3т7й ปีที่แล้ว

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

  • @sykalovandrey6090
    @sykalovandrey6090 2 ปีที่แล้ว +1

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

  • @19n1ght
    @19n1ght 2 ปีที่แล้ว

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว +1

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

  • @egamegadriveaaa
    @egamegadriveaaa 2 ปีที่แล้ว +1

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

  • @pavell53
    @pavell53 2 ปีที่แล้ว

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

  • @aspirine17
    @aspirine17 2 ปีที่แล้ว

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

    • @it-sin9k
      @it-sin9k  2 ปีที่แล้ว

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

  • @ПавелШамашов
    @ПавелШамашов 2 ปีที่แล้ว +1

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

  • @NefedoffYuriy
    @NefedoffYuriy 5 หลายเดือนก่อน

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

  • @ЕвгенийЧекердес
    @ЕвгенийЧекердес 2 ปีที่แล้ว

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