Не удается прочитать свойства undefined (чтение «длины») при циклическом переборе состояния

Привет всем, могу ли я узнать, почему состояние, которое заполняется значениями из API с использованием useEffect, не перебирает данные, пока я предоставляю "?" пометить перед функцией .map или перед функцией длины? Код: 1- определение состояния:

  const [userInProgressTasks, setUserInProgressTasks] = useState();

2- Получение данных из API:

useEffect(() => {
    let isMounted = true;
    //to cancel our request if the component is unmounted
    const controller = new AbortController();
 const getUserTasksInProgress = async () => {
      try {
        const response = await axiosPrivate.get(
          ApiConstants.GETALL_USER_IN_PROGRESS_TASKS_ENDPOINT(userObject?.id),
          {
            signal: controller.signal,
          }
        );
        console.info(response?.data);
        isMounted && setUserInProgressTasks(response?.data);
      } catch (err) {
        console.err(err);
        //in case of error (exipre of refresh token) - send them back to login
        navigate("/auth/login", {
          state: { from: location },
          replace: true,
        });
      }

getUserTasksInProgress();

    //clean up function of useEffect - it runs when the component unmount
    return () => {
      isMounted = false;
      //cancel any request when the component unmount
      controller.abort();
    };

  }, []);

    };

3- цикл по состоянию:

              {userInProgressTasks?.length <= 0 ? (
                <>
                  <div className = "NoTasks-Image-Container">
                    <img src = {InProgressImage} />
                  </div>
                </>
              ) : (
                <>
                 {userInProgressTasks?.map((t) => (
                  <p>{t.taskId}</p>
                 )  )}
                </>
              )}

Любые идеи, почему? знак '?' дождаться заполнения состояния или что-то вроде этого?

Дайте userInProgressTasks значение по умолчанию.

epascarello 25.11.2022 21:09

Вы знаете, что такое ?.? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

epascarello 25.11.2022 21:11

@epascarello ценю разъяснение, теперь я делаю, что делает оператор '?' делать, но моя проблема была в значении состояния по умолчанию, спасибо.

ahmed7am1d 25.11.2022 22:26

Вы все еще могли бы сделать это без состояния по умолчанию с правдивой проверкой, например. {userInProgressTasks?.length ? (.....

epascarello 25.11.2022 23:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
4
66
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Жизненный цикл следующий:

  1. useState устанавливается первым с неопределенным для userInProgressTasks
  2. оказывать
  3. использованиеЭффект

Вот почему он просит вас защитить значения с помощью ? потому что они могут быть неопределенными Я бы предложил всегда инициализировать ваше состояние

  const [userInProgressTasks, setUserInProgressTasks] = useState([]);

Другие вопросы по теме