"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إطار الواجهة الجديدة؟

إطار الواجهة الجديدة؟

تم النشر بتاريخ 2024-08-28
تصفح:278

New Frontend Framework?

أو جافا سكريبت الفانيليا مع وظيفتين مساعدتين؟

في هذه المقالة، سأناقش كيفية تطوير مكونات الويب القابلة لإعادة الاستخدام باستخدام مكتبة Fusor وفوائد القيام بذلك.

يمكن بعد ذلك تجميع هذه المكونات في تطبيقات ويب كاملة على قدم المساواة مع تلك التي تم إنشاؤها باستخدام React، Angular، Vue، Solid، Svelte، وغيرها.

تتكون واجهة Fusor API من وظيفتين رئيسيتين فقط:

  • إنشاء عنصر DOM ملفوفًا في كائن خاص.
  • تحديث عنصر DOM مغلف في كائن خاص.
بالإضافة إلى بعض الوظائف النادرة الاستخدام مثل:

  • احصل على عنصر DOM من كائن خاص.
لست بحاجة إلى معرفة أي شيء عن هذا الكائن المميز.

إنشاء عنصر DOM

الإنشاء عبر JSX

استيراد { getElement } من "@fusorjs/dom"; عدد ثابت = 0؛ // إنشاء عبر JSX رسالة const =
الثواني المنقضية {count}
; document.body.append(getElement(message)); // يحصل
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
لقد استخدمنا وظائف

إنشاء والحصول على وظائف واجهة برمجة التطبيقات.

إنشاء بديل غير JSX

استيراد { div } من "@fusorjs/dom/html"; رسالة const = div ("الثواني"، العد، " المنقضي")؛ // يخلق
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
تحديث عنصر DOM

استيراد { getElement, update } من "@fusorjs/dom"; دع العد = 0؛ رسالة const =
الثواني {() => العد} المنقضية
; // يخلق document.body.append(getElement(message)); // يحصل setInterval(() => { العد = 1؛ تحديث(رسالة); // تحديث }, 1000);
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
استخدمنا وظيفة

update API. يقوم بتحديث عنصر DOM وجميع أبنائه بشكل متكرر . يقوم باسترداد قيم جديدة من نتائج الوظائف، مما يجعلها ديناميكية.

يمكن أن تكون جميع العناصر الفرعية والسمات والخصائص ديناميكية.


(toggle ? "on" : "off")} />
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
لن تحدث تحديثات DOM إلا إذا كانت القيم الجديدة

تختلف عن القيم الحالية.

إعداد المعلمات

في معظم الأحيان، ستقوم بتعيين المعلمات كالمعتاد:


import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
ومع ذلك، في بعض الأحيان ستحتاج إلى التمييز بين

السمات و الخصائص. لتحديد نوع، يمكنك إضافة لاحقات _a أو _p إلى أسمائهم:

import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
لإضافة

معالج الأحداث، يجب عليك دائمًا استخدام لاحقة _e:

"معالج الأحداث"} />
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
هناك أنواع إضافية، وبعضها يمكن أن يأخذ خيارات

إضافية لضمان التوافق الكامل مع معايير W3C:

"معالج الأحداث"} />
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
إنشاء مكون قابل لإعادة الاستخدام

قم بتكوين مكوناتك باستخدام كائنات Fusor الخاصة. تغليف الحالة والمعلمات داخل الوظائف. قم بكتابة أسماء المكونات الخاصة بك بحرف كبير.

إليك مثال لمكون زر العد:


استيراد { getElement, update } من "@fusorjs/dom"; زر العد الثابت = (الدعائم) => { دع العد = الدعائم. العد ؟؟ 0; // الحالة الأولية ثابت النفس = ( { العد = 1؛ التحديث(الذات); }} > تم النقر على {() => العد} مرات زر> ); عودة النفس؛ }; تطبيق ثابت = () => (

ثلاثة أزرار للعد

); document.body.append(getElement(App()));
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
يقوم مكون CountingButton بتحديث

جزء فقط من عنصر DOM الخاص به دون التأثير على بقية التطبيق.

بمجرد أن تفهم تمامًا كيفية عمل المكون أعلاه، يمكنك إعادة كتابته بطريقة

أقصر قليلاً مع تحقيق نفس النتيجة:

Const CountingButton = ({ count = 0 }) => ( { العد = 1؛ التحديث(الذات); }} > تم النقر على {() => العد} مرات زر> );
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
تستقبل كل وظيفة رد اتصال لمعالج الأحداث وسيطتين: كائن الحدث القياسي والكائن الخاص الحالي.

مرة أخرى، إذا فهمت المثال أعلاه، فراجع الإصدار

الأقصر من نفس المكون:

Const CountingButton = ({ count = 0 }) => ( (العدد = 1)}> تم النقر على {() => العد} مرات زر> );
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
لقد أضفنا خيار التحديث لتحديث المكون بعد استدعاء رد اتصال معالج الحدث، وهو ما يعادل المثال السابق.

دورة الحياة

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

ويتكون من أربع مراحل فقط:

  1. إنشاء المكون
  2. الاتصال بـ DOM
  3. تحديث DOM
  4. اقطع الاتصال عن DOM
استيراد { getElement, update } من "@fusorjs/dom"; const IntervalCounter = ({ العد = 0 }) => { console.log("1. قم بإنشاء المكون"); يعود (
{ console.log("2. الاتصال بـ DOM"); const timerId = setInterval(() => { عدد ؛ التحديث(الذات); console.log("3. قم بتحديث DOM"); }, 1000); العودة () => { ClearInterval(timerId); console.log("4. قطع الاتصال من DOM"); }; }} > منذ أن انقضت {() => العد} ثانية
); }; مثيل const = ؛ عنصر ثابت = getElement(instance); document.body.append(element); setTimeout(() => element.remove(), 15000);
import { getElement } from "@fusorjs/dom";

const count = 0;

// Create via JSX
const message = 
Seconds {count} elapsed
; document.body.append(getElement(message)); // Get
تحتوي خاصية التحميل على وظيفة يتم تشغيلها عند إضافة المكون إلى DOM. تأخذ هذه الوظيفة وسيطة واحدة: الكائن الخاص الحالي. ويمكنه أيضًا إرجاع دالة أخرى يتم تشغيلها عند إزالة المكون من DOM.

نحن نتحكم بشكل كامل في هذه المراحل الأربع من دورة الحياة. يتيح لنا ذلك إنشاء المكونات وتحديثها و

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

بهذا يختتم البرنامج التعليمي

كما ترون من هذا البرنامج التعليمي، Fusor بسيط وموجز وصريح. في أغلب الأحيان، ستستخدم فقط وظيفتين

من وظائف واجهة برمجة التطبيقات (API). ومع ذلك، فهو يوفر أيضًا قدرًا كبيرًا من التحكم والمرونة عند الحاجة. لذا، للإجابة على السؤال الموجود في العنوان، Fusor هي مكتبة جافا سكريبت صغيرة، وليست إطارًا، ولكنها يمكنها تحقيق نفس النتائج مثل الأطر الأخرى.

ابدأ الترميز

جميع الأمثلة المذكورة أعلاه متاحة على CodeSandbox.

راجع أيضًا مثال الساعة التناظرية SVG.

إليك تطبيقًا حقيقيًا.

المشاريع النموذجية المبدئية:

    مشغل جافا سكريبت
  • كاتب TypeScript
  • شكرًا لك

بيان الافراج تم نشر هذه المقالة على: https://dev.to/isumix/new-frontend-framework-5ain?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3