Fable: السمة لتجميع الوسائط ككائن JS

تم إنشاؤها على ٣٠ أكتوبر ٢٠١٨  ·  3تعليقات  ·  مصدر: fable-compiler/Fable

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

في FableConf ، اقترح vbfox تمكين سمة لتجميع الوسائط ككائن JS ، لذلك لا نحتاج إلى إعلان سجل في كل مرة نريد تحديد مكون دالة باستخدام الخاصيات. لذا بدلاً من:

type MyProps = { key: string; value1: int; value2: float[] }

let MyComponent (props: MyProps) =
    div [] [...]

// Use
ofFunction MyComponent { key = "foo"; value1 = 5; value2 = [] } []

يمكننا أن نكتب:

let [<MagicAttribute>] MyComponent (key: string) (value1: int) (value2: float[]) () =
    div [] [...]

// Use?
ofFunction2 (MyComponent "foo" 5 []) []

لقد لاحظت أننا نسينا مناقشة كيف سيتم تسمية هذا. في النموذج أعلاه ، أضفت للتو وسيطة وحدة في النهاية لمنع التنفيذ ، ولكن قد تكون هناك طرق أخرى.

من حيث المبدأ ، أردت تجنب السمات السحرية في F # قدر الإمكان ، لكن يمكن تبريرها في هذه الحالة. قد يكون البديل هو الانتظار حتى تأتي السجلات المجهولة في F #. قد يحلون هذا الموقف وسنتماشى مع معيار F # ، ويبدو أنهم سيكونون في وقت مبكر في معاينات F # .

discussion

التعليق الأكثر فائدة

لا تزال السجلات المجهولة طويلة جدًا:

// Declaration
let userView = namedMemo "User" (fun ({| UserId: string; Name: string |}) ->
    a [Href (sprintf "/%s/" props.UserId)] [str props.Name])

// Usage
ofElementType userView { UserId = "vbfox"; Name = "Julien Roncaglia" } []

السجلات العادية:

// Declaration
type UserViewProps = { UserId: string; Name: string }
let userView = namedMemo "User" (fun props ->
    a [Href (sprintf "/%s/" props.UserId)] [str props.Name])

// Usage
ofElementType userView { UserId = "vbfox"; Name = "Julien Roncaglia" } []

لكن كلما فكرت في اقتراحي أكثر كلما رأيت مشاكل معه ... حتى مع وجود مثل هذه البدائية ، سيسمح للمكونات الوظيفية بالعمل ولكن ليس العناصر المغلفة مثل المذكرة حيث ستفقد أسماء الوسيطات من المترجم :(: (:(

أعتقد أنه يمكنك إغلاق alfonsogarciacaro وسأعيد فتح واحد إذا وجدت طريقة لحل هذا ... في الوقت الحالي

ال 3 كومينتر

قد يكون البديل هو الانتظار حتى تصل السجلات المجهولة إلى F #

نظرًا لأن المشكلة قد تمت معالجتها بالفعل في الجزء F # من الأشياء وهناك بالفعل بديل في Fable من خلال تحديد سجل ، أقترح الانتظار حتى يكون لدينا سجلات مجهولة. وإلا فإنك ستضيف فقط ميزة ستتم إزالتها في المستقبل القريب ، ناهيك عن أنه يجب تنفيذها واختبارها وتوثيقها وإضافتها مع بعض الأمثلة وسيحتاج المستخدمون إلى معرفة سمة أخرى بجانب ترسانتهم من المراوغات الخرافية التي القيام بأشياء جافا سكريبت

أنا أؤيد انتظار سجل F # مجهول

لا تزال السجلات المجهولة طويلة جدًا:

// Declaration
let userView = namedMemo "User" (fun ({| UserId: string; Name: string |}) ->
    a [Href (sprintf "/%s/" props.UserId)] [str props.Name])

// Usage
ofElementType userView { UserId = "vbfox"; Name = "Julien Roncaglia" } []

السجلات العادية:

// Declaration
type UserViewProps = { UserId: string; Name: string }
let userView = namedMemo "User" (fun props ->
    a [Href (sprintf "/%s/" props.UserId)] [str props.Name])

// Usage
ofElementType userView { UserId = "vbfox"; Name = "Julien Roncaglia" } []

لكن كلما فكرت في اقتراحي أكثر كلما رأيت مشاكل معه ... حتى مع وجود مثل هذه البدائية ، سيسمح للمكونات الوظيفية بالعمل ولكن ليس العناصر المغلفة مثل المذكرة حيث ستفقد أسماء الوسيطات من المترجم :(: (:(

أعتقد أنه يمكنك إغلاق alfonsogarciacaro وسأعيد فتح واحد إذا وجدت طريقة لحل هذا ... في الوقت الحالي

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

SirUppyPancakes picture SirUppyPancakes  ·  3تعليقات

alfonsogarciacaro picture alfonsogarciacaro  ·  3تعليقات

forki picture forki  ·  3تعليقات

MangelMaxime picture MangelMaxime  ·  3تعليقات

nozzlegear picture nozzlegear  ·  3تعليقات