AndreiAntanovich
@AndreiAntanovich
Full-stack web developer

Почему axios.interceptor при перехвате запроса отправляет актуальные данные, а так-же все прошлые данные?

Здравствуйте.
Есть интерцептор, который консолит каждый раз при запросе на любой адрес текущий токен с хранилища:
useMemo(()=>{
    axios.interceptors.request.use( config=>{
      console.log(props.jwtAccessToken)
      return config
    },(err)=>{
      return Promise.reject(err)
    })
  },[props.jwtAccessToken])

А так-же есть кнопка логина, при нажатии, в результате которого приходит с сервера токен и отправляется в хранилище:
const logIn =  () => {
    if (!user.email || !user.password) {
      console.log('Enter login and password')
      return
    }
    const userData = JSON.stringify(user)
     axios.request({ url: '/api/logInUser', method: 'post', data: userData, headers: { 'Content-Type': 'application/json' } })
      .then(response => {
        if (response.data.jwtAccessToken) {
          props.setJWT(response.data.jwtAccessToken)
        }
      })
  }

Проблема в том, что при нажатии на кнопку логин отправляется судя по всему новый и старые запросы все, видно из консоли.(смотрите скрин консоли, после множества нажатий).
https://disk.yandex.by/i/CBriL23gA22DYQ
Перепробовал все варианты, так происходит только при использовании интерцептора, если эту же логику оставляю без его использования, а подвесив именно на запрос по нужному адресу, то все работает корректно. Надеюсь что все понятно, спасибо.
  • Вопрос задан
  • 550 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Каждый раз когда меняется props.jwtAccessToken или создаётся новый компонент - вызывается useMemo. Каждый раз как вызываются useMemo - добавляется ещё один interceptor.

Interceptor надо вешать, очевидно, один раз одну штуку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы