Dva: Dapatkah Langganan menambahkan beberapa contoh atau dokumentasi?

Dibuat pada 19 Okt 2016  ·  17Komentar  ·  Sumber: dvajs/dva

Sumber data dapat berupa waktu saat ini, koneksi websocket server, masukan keyboard, perubahan geolokasi, perubahan perutean riwayat, dll.

Anda dapat memahami dari mana asal penyiapan dan keyEvent ini, dan cara menulisnya jika websocket atau yang lainnya.

question

Komentar yang paling membantu

Mencoba soket, hanya untuk referensi.

// 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'
        })
    })
}

Semua 17 komentar

Artinya, kunci ini hanya digunakan untuk membantu pengembang menandai jenis fungsi tertentu di sini. Kunci hanya lolos dalam pengiriman dan riwayat, dan kode pemantauan khusus memerlukan pustaka pihak ketiga tertentu untuk menerapkan pemantauan.

Apakah pemahaman saya benar?

Ya, format kunci / nilai digunakan di sini. Saat ini, hal ini terutama untuk menjaga format konsisten dengan efek dan pereduksi. Nanti, fungsi pembatalan langganan akan didukung, dan kunci akan digunakan.

Saya mengerti, terima kasih.
Tapi saya rasa saya bisa menambahkan arti dari pembahasan di atas ke dokumen-dokumen ini, Anda mungkin mengalami masalah yang sama seperti saya :)

langganan hanya menentukan tempat untuk berlangganan data. Kemudian pengiriman dan riwayat akan diteruskan.Bagaimana cara berlangganan atau memantau akan membutuhkan perpustakaan kelas pihak ketiga untuk diterapkan. Apakah pemahaman itu? Pengiriman adalah pengiriman di penyimpanan redux, dan sejarah adalah sejarah di react-router, apakah itu dipahami?

@ roc2539 Ya.

Dapatkah saya mengakses konten negara bagian atau alat peraga dalam penyiapan di langganan?

@gzbigegg Tidak, picu tindakan dan biarkan efek menanganinya.

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

Ada dua pertanyaan. Saya tidak tahu apakah itu benar. Dokumen mengatakan bahwa elm tidak pernah berhubungan dengan mereka, dan saya tidak memahami langganan dengan sangat jelas.

  1. Setelah melewati history dan mengeksekusi history.listen, itu akan dipicu ketika rutenya berubah. Saya tidak tahu apakah pemahamannya benar.
  2. Kapan langganan yang hanya lolos dalam pengiriman akan dipicu?

Saya ingin melihat beberapa contoh langganan seperti websocket

Cara menonaktifkan dua tindakan dalam penyiapan

Tidak ada dokumen yang jelas tentang parameter waktu dan injeksi callback dalam pendaftaran langganan @ roc2539, dapatkah Anda menjawabnya?

Setelah mengubah ke rute hash, penyiapan tidak dapat memantau perubahan masukan url dari keyboard.
Tapi menggunakan browserHistory tidak masalah.

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

    },

Mencoba soket, hanya untuk referensi.

// 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'
        })
    })
}

Saya telah mencoba mencari tahu cara memicu langganan dengan kunci tertentu. Awalnya, semuanya akan dijalankan satu kali saat diinisialisasi, jadi langganan ini hanya menyediakan penutupan pengiriman dan riwayat 😄

langganan: {
penyiapan ({dispatch}) {
pengiriman ({type: 'query'})
}
} Ini hanya pelaksanaan awal dari tindakan pengiriman, tidak benar-benar melakukan tindakan berlangganan.

Tiba-tiba tersadar

Apakah halaman ini membantu?
0 / 5 - 0 peringkat