effect_tw
@effect_tw

Верны ли зависимости в данном useEffect?

1. useEffect у которого в зависимостях находится login , сработает ли он при монтировании компонента в котором используется хук useAuth?
2. Для чего в useEffect'e в зависимостях указан login , ведь useEffect сработает когда изменится login, а изменится он при залогировании пользователя, зачем же тогда еще и useEffect вызывать ?
const storageName = 'userData'

export const useAuth = () => {
  const [token, setToken] = useState(null)
  const [ready, setReady] = useState(false)
  const [userId, setUserId] = useState(null)

  const login = useCallback((jwtToken, id) => {
    setToken(jwtToken)
    setUserId(id)

    localStorage.setItem(storageName, JSON.stringify({
      userId: id, token: jwtToken
    }))
  }, [])


  const logout = useCallback(() => {
    setToken(null)
    setUserId(null)
    localStorage.removeItem(storageName)
  }, [])

  useEffect(() => {
    const data = JSON.parse(localStorage.getItem(storageName))

    if (data && data.token) {
      login(data.token, data.userId)
    }
    setReady(true)
  }, [login])


  return { login, logout, token, userId, ready }
}
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ответы на вопрос 1
Wondermarin
@Wondermarin
1. Да, сработает.
2. useEffect сработает 1 раз при монтировании компонента.
login в данном случае является мемоизированным колбэком, который гарантирует useEffect, что будет вызван единожды, т.к. его массив зависимостей пуст. Подробнее об этом вы можете прочитать здесь.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 янв. 2021, в 12:02
10000 руб./за проект
19 янв. 2021, в 12:01
2000 руб./за проект
19 янв. 2021, в 11:53
12000 руб./за проект