Данные не определены с помощью useSWR

Я пытаюсь использовать useSWR в своем приложении NEXT.JS. Во-первых, я сделал собственный хук, где я его использую:

import useSWR from "swr";

const apiUrl = process.env.NEXT_PUBLIC_API_URL;

const fetcher = (url) => {
  fetch(url).then((res) => res.json());
};

export default function useSocialMedia() {
  const url = apiUrl + "/socialMedia";
  const { data, error } = useSWR(url, fetcher);
  console.info("data : ", data);

  return {
    socialMedia: data,
    loading: !error && !data,
    error: error,
  };
}

Затем я импортирую его в свой компонент:

import styles from "./styles/socialIcons.module.scss";
import useSocialMedia from "../../../utils/hooks/useSocialMedia";

export default function SocialIcons() {
  const { socialMedia, loading, error } = useSocialMedia();

  return (
    <div className = {styles.socialIcons}>
      {loading && <p>Loading...</p>}
      {error && <p>Loading failed : {error}</p>}
      {socialMedia && <p>Here will appear my social media list</p>}
    </div>
  );
}

В результате моего console.info в моем пользовательском хуке у меня всегда есть неопределенные данные, и поэтому мой компонент зависает при загрузке... Я не понимаю, что не так с моим кодом.

Насколько я вижу из вашего кода, вы не возвращаете никаких данных в функцию выборки.

Mithat Ercan 08.11.2022 15:51

Извините, я вставил свой код с console.info в свой сборщик. Я отредактировал свой вопрос, потому что даже с возвратом данных fecther он все еще не определен после использования SWR...

Fabien Delmotte 08.11.2022 16: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) для оценки ваших знаний,...
0
2
264
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Рассмотрим следующий пример. Вы забыли вернуть данные в функцию выборки. Вы только что использовали console.info, и он не дал никаких результатов.



import React from 'react';
import useSWR from 'swr';

const apiUrl = 'https://jsonplaceholder.typicode.com/posts';

const fetcher = (url) => fetch(url).then((r) => r.json());

function useSocialMedia() {
  const url = apiUrl;
  const { data, error } = useSWR(url, fetcher);

  return {
    socialMedia: data,
    loading: !data,
    error,
  };
}

export default function SocialIcons() {
  const { socialMedia, loading, error } = useSocialMedia();

  return (
    <div>
      {loading && <p>Loading...</p>}
      {error && <p>Loading failed : {error}</p>}
      {socialMedia && socialMedia.map((post) => <p>{post.title}</p>)}
    </div>
  );
}




Извините, я вставил свой код с console.info в свой сборщик. Я отредактировал свой вопрос, потому что даже с возвратом данных fecther он все еще не определен после использования SWR...

Fabien Delmotte 08.11.2022 16:15

Изучите функцию сборщика; он заключен в фигурные скобки; чтобы вернуть выборку, используйте ключевое слово return или удалите фигурные скобки. Вы можете посмотреть мой код, чтобы увидеть, как я построил функцию получения.

Mithat Ercan 08.11.2022 16:19

Спасибо ! Я только что совершил ошибку новичка... Думаю, пришло время сделать кофе-брейк... Теперь он работает как часы!

Fabien Delmotte 08.11.2022 16:23

Это нормально! Удачи с вашим проектом.

Mithat Ercan 08.11.2022 16:24

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