Проблема с React Native: [Отклонение необработанного обещания: ошибка типа: f не является функцией. (В ‘f()’, ‘f’ не определено)]

#javascript #reactjs #typescript #react-native #fetch

#javascript #reactjs #typescript #react-native #выборка

Вопрос:

Я пытаюсь создать систему входа в систему с использованием состояний и выборки, чтобы пользователь мог получить свой действительный токен, а затем поместить его в хранилище с асинхронным хранилищем. Я все еще нахожусь на этапе взаимодействия с API (expressjs). Все работает на тот момент, когда я ввожу адрес электронной почты и пароль, я получаю токен в json, но у меня есть ошибка типа предупреждения, которая сообщает мне:

[Отклонение необработанного обещания: ошибка типа: f не является функцией. (В ‘f()’, ‘f’ не определено)]

На данный момент мой код очень прост (я понятия не имею, откуда он взялся):

 const onSubmit = () => {
    setLoading(true)
    fetch('http://192.168.1.36:3000/api/users/login', {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        email: email,
        password: password
      })
    })
    .then((response) => response.json())
    .then((res) => console.log(res))
    .catch((err) => console.log(err))
    .finally(setLoading(false));
  } 

Я не знаю, является ли синтаксис, который я использую с выборкой, «хорошим» и «оптимизированным» для системы входа в систему, но я надеюсь, что я был достаточно ясен в своем объяснении.

Танки

Ответ №1:

Я думаю, это связано с вашим предложением finally:

 .finally(setLoading(false));
 

Функции finally должна быть передана сама функция. Два способа сделать это:

 .finally(() => setLoading(false));
.finally(setLoading.bind(undefined, false));