Dva: هل يمكن أن تضيف الاشتراكات بعض الأمثلة أو الوثائق؟

تم إنشاؤها على ١٩ أكتوبر ٢٠١٦  ·  17تعليقات  ·  مصدر: dvajs/dva

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

يمكنك فهم مصدر هذا الإعداد و keyEvent ، وكيفية كتابته إذا كان Websocket أو أي شيء آخر.

question

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

جربت المقبس ، للإشارة فقط.

// model

import * as service from '../services/socket';

subscriptions: {
    socket({dispatch}){ // socket相关
        return service.listen(data => {
            switch (data.type) {
                case 'connect':
                    if (data.state === 'success') {
                        dispatch({
                            type: 'connectSuccess'
                        })
                    } else {
                        dispatch({
                            type: 'connectFail'
                        })
                    }
                    break;
                case 'welcome':
                    dispatch({
                        type: 'welcome'
                    });
                    break;
            }
        })
    }
},

// services

import io from 'socket.io-client';

let socket = '';

export function listen(action) {
    if (socket === '') {
        try {
            socket = io("localhost:3000");
            action({
                type: 'connect',
                state: 'success'
            });
        } catch (err) {
            action({
                type: 'connect',
                state: 'fail'
            });
        }
    }
    socket.on('welcome', () => {
        action({
            type: 'welcome'
        })
    })
}

ال 17 كومينتر

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

هل فهمي صحيح؟

نعم ، يتم استخدام تنسيق المفتاح / القيمة هنا. في الوقت الحالي ، هو أساسًا للحفاظ على التنسيق متسقًا مع التأثيرات والمخفضات. لاحقًا ، سيتم دعم وظيفة إلغاء الاشتراك ، وسيتم استخدام المفتاح.

أفهم ذلك، شكرا لك.
لكن أعتقد أنه يمكنني إضافة معنى المناقشة أعلاه إلى هذه المستندات ، فقد تواجه نفس المشكلة مثلي :)

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

@ roc2539 نعم.

هل يمكنني الوصول إلى محتوى الحالة أو الدعائم في الإعداد في الاشتراكات؟

gzbigegg لا ، قم بتشغيل الإجراء واترك التأثير يتعامل معه.

subscriptions: {
    setup ({ dispatch }) {
      dispatch({ type: 'query' })
    }
}

هناك سؤالان ، لا أعرف ما إذا كان صحيحًا ، تقول الوثيقة إن شركة علم لم تكن على اتصال بهم مطلقًا ، ولا أفهم الاشتراكات بشكل واضح.

  1. بعد تمرير التاريخ وتنفيذ history. Listen ، سيتم تشغيله عندما يتغير المسار. لا أعرف ما إذا كان الفهم صحيحًا.
  2. متى سيتم تشغيل الاشتراكات التي تمر فقط في الإرسال؟

أود أن أرى بعض أمثلة الاشتراك مثل websocket

كيفية اكتشاف إجراءين في الإعداد

لا توجد وثيقة واضحة حول توقيت وحقن رد الاتصال في تسجيل الاشتراك @ roc2539 ، هل يمكنك الرد عليها؟

بعد التغيير إلى مسار التجزئة ، يتعذر على الإعداد مراقبة تغيير إدخال عنوان url من لوحة المفاتيح.
لكن استخدام BrowsHistory جيد.

 setup ({ dispatch }) {
      console.log('models-app') // 手动改变url地址,不会进此方法
      dispatch({ type: 'query' })

    },

جربت المقبس ، للإشارة فقط.

// model

import * as service from '../services/socket';

subscriptions: {
    socket({dispatch}){ // socket相关
        return service.listen(data => {
            switch (data.type) {
                case 'connect':
                    if (data.state === 'success') {
                        dispatch({
                            type: 'connectSuccess'
                        })
                    } else {
                        dispatch({
                            type: 'connectFail'
                        })
                    }
                    break;
                case 'welcome':
                    dispatch({
                        type: 'welcome'
                    });
                    break;
            }
        })
    }
},

// services

import io from 'socket.io-client';

let socket = '';

export function listen(action) {
    if (socket === '') {
        try {
            socket = io("localhost:3000");
            action({
                type: 'connect',
                state: 'success'
            });
        } catch (err) {
            action({
                type: 'connect',
                state: 'fail'
            });
        }
    }
    socket.on('welcome', () => {
        action({
            type: 'welcome'
        })
    })
}

لقد كنت أحاول معرفة كيفية تشغيل اشتراك بمفتاح محدد. في الأصل ، سيتم تنفيذه جميعًا مرة واحدة عند تهيئته ، لذلك لا يوفر هذا الاشتراك سوى إغلاق الإرسال والمحفوظات 😄

الاشتراكات: {
الإعداد ({إرسال}) {
إرسال ({type: 'query'})
}
} هذا هو التنفيذ الأولي فقط لإجراء الإرسال ، ولا يقوم في الواقع بتنفيذ إجراء الاشتراك.

أدركت فجأة

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