Привет всем, могу ли я узнать, почему состояние, которое заполняется значениями из 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>
) )}
</>
)}
Любые идеи, почему? знак '?' дождаться заполнения состояния или что-то вроде этого?
Вы знаете, что такое ?.
? developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
@epascarello ценю разъяснение, теперь я делаю, что делает оператор '?' делать, но моя проблема была в значении состояния по умолчанию, спасибо.
Вы все еще могли бы сделать это без состояния по умолчанию с правдивой проверкой, например. {userInProgressTasks?.length ? (.....
Жизненный цикл следующий:
userInProgressTasks
Вот почему он просит вас защитить значения с помощью ? потому что они могут быть неопределенными Я бы предложил всегда инициализировать ваше состояние
const [userInProgressTasks, setUserInProgressTasks] = useState([]);
Дайте userInProgressTasks значение по умолчанию.