Comments 2
Но еще из любопытного, можно вставлять и совсем не props, например ref или же вообще какой-нибудь window.location.pathname:
Не делайте так, если не хотите долгого неочевидного дебага!
Чтение чего либо, кроме props, state и context в теле компонента — это сайдэффект и должно происходить в use(Layout)Effect.
Во первых, ваш компонент может не знать об изменении значения произвольной рефки (например, если она спускается пропсом глубже) или компонент может не подписываться на событие popState и соответственно не отреагировать на изменение window.location. Это приведет к stalled эффекту — использованию протухших значений из замыкания.
Во вторых, такой код сломается при серверном рендеринге.
Любое чтение из "окружающего мира" (ref.current это тоже зачастую кусочек окружающего мира) надо делать в эффектах.
Неоправданно мало комментариев под такой интересной статьей - видимо, редкая птица может долететь до середины такой реки ))
Первое погружение в исходники хуков (задел на будущие статьи)