Я пытаюсь загрузить по 1 изображению за раз из своего JSON, но получаю ошибку (Не удается уничтожить свойство «идентификатор «» изображений[счетчик]», поскольку оно не определено.)

#javascript #reactjs #jsx

Вопрос:

Я попытался деструктурировать только нужные мне реквизиты из состояния, используемого для хранения данных JSON, а затем использовать состояние для значения счетчика, чтобы у меня было несколько кнопок next/prev и одновременно отображалось только 1 изображение (используя в качестве индекса для массива значение счетчика, следовательно, это будет 1 элемент за раз, а кнопки next/prev будут увеличиваться/уменьшаться на 1 ). Я сделал это в предыдущем проекте, и это сработало, но по какой-то причине сейчас этого не происходит.

Есть какие-нибудь идеи, почему они не работают, или, возможно, какое-то представление о другом подходе ?

импортируйте React, { useEffect, useState } из «react»; импортируйте загрузку из «./загрузка»;

 const key = "#!$!#$!#$#!$!#$#!#$!$#!$!#$!$#!$"; 
const url = `https://api.unsplash.com/photos/?client_id=${key}`;
console.log(url);

//main Component
function App() {
  //states
  const [loading, setLoading] = useState(true);
  const [images, setImages] = useState([]);
  const [counter, setCounter] = useState(0);

  const fetchImages = async () => {
    setLoading(true);
    try {
      const response = await fetch(url);
      const image = await response.json();
      setLoading(false);
      setImages(image);
    } catch (error) {
      console.log(error);
      setLoading(true);
    }
  };

  useEffect(() => {
    fetchImages();
  }, [url]);

  //loading
  if (loading) {
    return (
      <main>
        <Loading></Loading>
      </main>
    );
  }

  //primary return
  const { id, created_at, description, urls } = images[counter];
  return (
    <main>
      {urls.map((image) => {
        return <img src={image.full}></img>;
      })}
    </main>
  );
}

export default App;
 

Комментарии:

1. Вы уверены, что ваш ответ возвращает данные и что это массив?

2. Да, я прокомментировал строку, в которой я разрушил, а также все в основном, обновил приложение и добавил console.log(изображения), и оно возвращает массив из 10 объектов. Затем, если я раскомментирую строку деструкции, это сработает, но если я снова попытаюсь сопоставить URL-адреса, я получу ошибку типа: url-адреса.карта не является функцией, и если я снова обновлю приложение, начальная ошибка и журнал консоли теперь показывают пустой массив. Может быть, что-то не так с асинхронным кодом ?

3. Вот как выглядит json : (10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}] (не могу вставить все это, потому что это слишком долго, но в основном внутри каждого объекта есть пара других объектов, одним из которых являются URL-адреса)