Задать вопрос
@MishaXXL

Как redux определяет, какие компоненты надо обновить?

Как reduxпривязываться в коде к компонентам через
const count = useSelector((state: { counter: number }) => state.counter)


Как я понял, у нас редакс создает в нашем компоненте обертке объект, где хранит
<Provider store={store}>
   <App />
</Provider>


набор свойств откуда берется одно из наших значений counter

Но как он понимает в каких компонентах лежат наши селекторы
const count = useSelector((state: { counter: number }) => state.counter)


если мы это не указываем в наших редьюсерах

И каким образом он заставляет принудительно обновиться компонентам?
  • Вопрос задан
  • 170 просмотров
Подписаться 1 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Javascript.ru
    Курс по React
    5 недель
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
useSelector внутри себя использует хук useSyncExternalStore (точнее, хук, аналогичный ему)

вкратце суть работы: из редуксового контекста (того самого, который использован внутри Provider) достается редуксовый же стор. Этот стор постоянный, но в нем есть состояние - объект, ссылка на который меняется при каждом изменении, ибо иммутабельность. Подписываемся на изменение этой ссылки (т.е. по факту на изменение любой части состояния), у стора есть метод subscribe для этого. При срабатывании эвента забираем наши данные селектором, и если результат селектора отличается от предыдущего раза, значит изменились именно наши данные и надо пнуть компонент, чтобы обновился, это уже useSyncExternalStore знает как сделать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
IT ATLAS Москва
от 200 000 до 250 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽