تفاعل الخطافات المخصصة


الخطافات هي وظائف قابلة لإعادة الاستخدام.

عندما يكون لديك منطق مكون يحتاج إلى استخدامه بواسطة مكونات متعددة ، يمكننا استخراج هذا المنطق إلى خطاف مخصص.

تبدأ الخطافات المخصصة بـ "استخدام". مثال useFetch:.


بناء خطاف

في الكود التالي ، نقوم بإحضار البيانات في Homeالمكون الخاص بنا وعرضها.

سوف نستخدم خدمة JSONPlaceholder لجلب البيانات المزيفة. هذه الخدمة رائعة لاختبار التطبيقات عندما لا توجد بيانات موجودة.

لمعرفة المزيد ، راجع قسم JavaScript Fetch API .

استخدم خدمة JSONPlaceholder لجلب عناصر "todo" المزيفة وعرض العناوين على الصفحة:

مثال:

index.js:

import { useState, useEffect } from "react";
import ReactDOM from "react-dom";

const Home = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("https://jsonplaceholder.typicode.com/todos")
      .then((res) => res.json())
      .then((data) => setData(data));
 }, []);

  return (
    <>
      {data &&
        data.map((item) => {
          return <p key={item.id}>{item.title}</p>;
        })}
    </>
  );
};

ReactDOM.render(<Home />, document.getElementById("root"));

قد يكون منطق الجلب مطلوبًا في مكونات أخرى أيضًا ، لذلك سنستخرجه في خطاف مخصص.

انقل منطق الجلب إلى ملف جديد لاستخدامه كخطاف مخصص:

مثال:

useFetch.js:

import { useState, useEffect } from "react";

const useFetch = (url) => {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url)
      .then((res) => res.json())
      .then((data) => setData(data));
  }, [url]);

  return [data];
};

export default useFetch;

index.js:

import ReactDOM from "react-dom";
import useFetch from "./useFetch";

const Home = () => {
  const [data] = useFetch("https://jsonplaceholder.typicode.com/todos");

  return (
    <>
      {data &&
        data.map((item) => {
          return <p key={item.id}>{item.title}</p>;
        })}
    </>
  );
};

ReactDOM.render(<Home />, document.getElementById("root"));


شرح المثال

لقد أنشأنا ملفًا جديدًا يسمى useFetch.jsيحتوي على وظيفة تسمى useFetchوالتي تحتوي على كل المنطق اللازم لجلب بياناتنا.

أزلنا عنوان URL المشفر الثابت واستبدلناه urlبمتغير يمكن تمريره إلى الخطاف المخصص.

أخيرًا ، نعيد بياناتنا من الخطاف الخاص بنا.

في index.js، نحن نستورد useFetchالخطاف الخاص بنا ونستخدمه مثل أي خطاف آخر. هذا هو المكان الذي نمرر فيه عنوان URL لجلب البيانات منه.

الآن يمكننا إعادة استخدام هذا الخطاف المخصص في أي مكون لجلب البيانات من أي عنوان URL.