Dva: [مناقشة] - بيان حول تبعية البيانات الأولية للصفحة

تم إنشاؤها على ١٧ ديسمبر ٢٠١٧  ·  3تعليقات  ·  مصدر: dvajs/dva

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

//摘自api文档
app.model({
  namespace: 'todo',
  // ... 
  subscriptions: {
    setup({ history, dispatch }) {
      // Subscribe history(url) change, trigger `load` action if pathname is `/`
      return history.listen(({ pathname }) => {
        if (pathname === '/') {
          dispatch({ type: 'load' });
        }
      });
    },
  },
});

البوابة: نموذج عنصر مكتوب بشكل مشابه

يختلف هذا عن تحميل البيانات أثناء دورة حياة مكونات الصفحة. على سبيل المثال ، في نفس مثال أخبار hackernews ، يمكننا اختيار إرسال إجراء التأثيرات المقابلة في componentWillMount أو componentDidMount من ListPage لتقديم الطلب وحتى التفكير من منظور عرض الخادم. ، يمكنك إضافة دورة حياة إضافية (مثل getInitProps من next.js) لتكون مسؤولاً عن إعلان تبعية البيانات الأولية لهذا النوع من الصفحات.

الطريقة الحالية لوضع تبعية البيانات الأولية للصفحة في التوصيف الفرعي للنموذج ، لدي الأسئلة التالية:

  1. تكرار منطق مطابقة عنوان url: تقع على عاتق جهاز التوجيه مسؤولية تحليل معلمات url وإعادة توجيهها إلى منطق الأعمال. من مثال hackernews ، يمكننا أن نرى أن بعضها قد تكرر ، وحتى "مستوى منخفض" نسبيًا مكتبة مثل pathToRegex (خلف جهاز التوجيه التفاعلي / السريع) كما يتم استخدامه لمطابقة URL والتحليل)
  2. فصل المهام: هناك ممارسات مختلفة تتوافق مع دلالات مختلفة ، فهل تحدد الصفحة البيانات التي تعتمد عليها الصفحة ، أم أن النموذج يعلن عن عنوان url الذي سيتم تحميل البيانات تحته؟
  3. تفقد الصفحة التحكم في الطلب. إذا أرادت الصفحة تنفيذ منطق معين بعد نجاح الطلب أو فشله ، فسيكون التنفيذ أكثر صعوبة ، لأن الصفحة نفسها ليست على علم بإجراء تحميل البيانات
  4. إن كيفية التعامل مع سيناريوهات عرض / تشابه الخادم هي في الواقع استمرار لـ 3. تحت عرض الخادم ، تحتاج إلى "تحميل البيانات التي تعتمد عليها الصفحة أولاً ، ثم تنفيذ عرض الصفحة" ، وإذا لم يكن بيان الطلب على مستوى الصفحة على الإطلاق ، يجب القيام بذلك. إنه أمر مزعج أكثر
  5. يبدو أن تصميم الاشتراك يتأثر بـ elm ، لكن الاشتراك في elm لا يستخدم كثيرًا في الواقع ، فهو يُستخدم فقط للتعامل مع السيناريوهات مثل websocket. ولا يزال الطلب الأولي يتم من خلال صفحة init بيان.

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

discussion wontfix

ال 3 كومينتر

خطاف النموذج

              邮箱:[email protected]

تم تخصيص التوقيع بواسطة NetEase Mail Master. في الساعة 16:30 يوم 17 ديسمبر 2017 ، كتب Qin Junwen: في المستند الرسمي ومثال hackernews ، يتم استخدام طريقة الاستماع إلى عنوان url المطابق للتاريخ في اشتراك النموذج لتحميل البيانات الأولية للصفحة .. على النحو التالي.
// من وثائق المعهد
app.model ({
مساحة الاسم: "todo"،
// ...
الاشتراكات: {
الإعداد ({history، dispatch}) {
// تغيير سجل الاشتراك (url) ، قم بتشغيل load الإجراء إذا كان اسم المسار هو /
return history.listen (({pathname}) => {
إذا (اسم المسار === '/') {
إرسال ({type: 'load'}) ؛
}
}) ؛
} ،
} ،
}) ؛
البوابة: نموذج عنصر مكتوب بشكل مشابه لـ dva-hackernews
يختلف هذا عما نراه عادةً عند تحميل البيانات في دورة حياة مكونات الصفحة. على سبيل المثال ، في نفس مثال أخبار hackernews ، يمكننا اختيار إرسال إجراء التأثيرات المقابلة في componentWillMount أو componentDidMount من ListPage لإجراء الطلب ، وحتى التفكير من منظور عرض الخادم. ، يمكنك إضافة دورة حياة إضافية (مثل getInitProps من next.js) لتكون مسؤولاً عن إعلان تبعية البيانات الأولية لهذه الصفحة.
الطريقة الحالية لوضع تبعية البيانات الأولية للصفحة في التوصيف الفرعي للنموذج ، لدي الأسئلة التالية:

تكرار منطق مطابقة عنوان url: تقع على عاتق جهاز التوجيه مسؤولية تحليل معلمات url وإعادة توجيهها إلى منطق الأعمال. من مثال hackernews ، يمكننا أن نرى أن بعضها قد تكرر ، وحتى "مستوى منخفض" نسبيًا مكتبة مثل pathToRegex (خلف جهاز التوجيه التفاعلي / السريع) كما يتم استخدامه لمطابقة URL والتحليل)
فصل المهام: هناك ممارسات مختلفة تتوافق مع دلالات مختلفة ، فهل تحدد الصفحة البيانات التي تعتمد عليها الصفحة ، أم أن النموذج يعلن عن عنوان url الذي سيتم تحميل البيانات تحته؟
تفقد الصفحة التحكم في الطلب. إذا أرادت الصفحة تنفيذ منطق معين بعد نجاح الطلب أو فشله ، فسيكون التنفيذ أكثر صعوبة ، لأن الصفحة نفسها ليس لديها تصور لإجراء تحميل البيانات كيفية التعامل مع عرض الخادم / سيناريوهات isomorphic. في الواقع ، هو استمرار لـ 3. ضمن عرض الخادم ، تحتاج إلى "تحميل البيانات التي تعتمد عليها الصفحة أولاً ، ثم تنفيذ عرض الصفحة" ، وإذا لم يكن بيان الطلب في على مستوى الصفحة على الإطلاق ، فسيكون القيام بذلك أكثر صعوبة.
يبدو أن تصميم الاشتراك يتأثر بـ elm ، لكن الاشتراك في elm لا يستخدم كثيرًا في الواقع ، فهو يُستخدم فقط للتعامل مع السيناريوهات مثل websocket. ولا يزال الطلب الأولي يتم من خلال صفحة init بيان.

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

- أنت تتلقى هذا لأنك مشترك في سلسلة الرسائل هذه. قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت سلسلة الرسائل.

{"api_version": "1.0"، "publisher": {"api_key": "05dde50f1d1a384dd78767c55493e4bb"، "name": "GitHub"}، "الكيان": {"external_key": "github / dvajs / dva"، "title ":" dvajs / dva "،" subtitle ":" مستودع GitHub "،" main_image_url ":" https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png " ، "avatar_image_url": " https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png "، "action": {"name": "Open in GitHub"، "url": " https://github.com/dvajs/dva "}}، "التحديثات": {"snippets": [{"icon": "DESCRIPTION"، "message": "[مناقشة] - حول الصفحة مشكلات تبعية البيانات (# 1402) "}] ،" الإجراء ": {" الاسم ":" عرض المشكلة "،" url ":" https://github.com/dvajs/dva/issues/1402 "}}}

@ yangbin1994

ما هو خطاف النموذج؟
لم أراه في الوثيقة النموذجية .

بافتراض وجود هذا الخطاف ، لا يبدو أنه يختلف جوهريًا عن القيام بذلك في الاشتراك.لا تزال الأسئلة 1-4 أعلاه موجودة.

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط حديث لها. سيتم إغلاقه إذا لم يحدث أي نشاط آخر. شكرا لمساهماتكم.

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