Skip to content

React و Vue ​

openFetch حزمة JavaScript عادية: تستوردها وتستدعي .get() / .post() مثل أي دالة أخرى. تعمل بنفس الطريقة في React وVue.

الأمثلة تستخدم واجهة تجريبية مجانية (بدون مفتاح API وبدون ملف .env). الرابط مكتوب كاملاً لتنسخ الكود وتشغّله مباشرة.


React ​

  1. ثبّت: npm install @hamdymohamedak/openfetch
  2. ضع الكود في ملف مكوّن (مثلاً PostTitle.jsx).
jsx
import { useEffect, useState } from "react";
import openFetch from "@hamdymohamedak/openfetch";

export function PostTitle() {
  const [title, setTitle] = useState("جاري التحميل…");

  useEffect(() => {
    let active = true;

    (async () => {
      try {
        const res = await openFetch.get(
          "https://jsonplaceholder.typicode.com/posts/1"
        );
        if (active) setTitle(res.data.title);
      } catch {
        if (active) setTitle("حدث خطأ");
      }
    })();

    return () => {
      active = false;
    };
  }, []);

  return <p>{title}</p>;
}
  • res هي الاستجابة الكاملة؛ جسم JSON في res.data.
  • active يقلل خطر تحديث الحالة بعد مغادرة المستخدم للصفحة.

لاحقاً يمكنك استخدام createClient مع baseURL لتختصر المسار:

js
import { createClient } from "@hamdymohamedak/openfetch";

const api = createClient({ baseURL: "https://jsonplaceholder.typicode.com" });
// ثم: await api.get("/posts/1")

Vue 3 ​

  1. ثبّت: npm install @hamdymohamedak/openfetch
  2. في ملف .vue:
vue
<script setup>
import { onMounted, ref } from "vue";
import openFetch from "@hamdymohamedak/openfetch";

const title = ref("جاري التحميل…");

onMounted(async () => {
  try {
    const res = await openFetch.get(
      "https://jsonplaceholder.typicode.com/posts/1"
    );
    title.value = res.data.title;
  } catch {
    title.value = "حدث خطأ";
  }
});
</script>

<template>
  <p>{{ title }}</p>
</template>

نفس الفكرة: res.data يحمل JSON المفسَّر.


React Server Components (اختياري) ​

إن كان إطارك يدعم مكوّنات خادم غير متزامنة:

jsx
import openFetch from "@hamdymohamedak/openfetch";

export default async function Page() {
  const res = await openFetch.get(
    "https://jsonplaceholder.typicode.com/posts/1"
  );
  return <p>{res.data.title}</p>;
}

التالي ​

MIT · @hamdymohamedak/openfetch