Dva: [Diskusi]-Pernyataan tentang ketergantungan data awal halaman

Dibuat pada 17 Des 2017  ·  3Komentar  ·  Sumber: dvajs/dva

Dalam contoh dokumen resmi dan berita peretas, metode mendengarkan url riwayat yang cocok dalam langganan model digunakan untuk memuat data awal halaman, sebagai berikut.

//摘自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' });
        }
      });
    },
  },
});

Portal: model item yang ditulis serupa

Ini berbeda dengan memuat data selama siklus hidup komponen halaman. Misalnya, dalam contoh yang sama dari hackernews, kita dapat memilih untuk mengirimkan tindakan efek yang sesuai di componentWillMount atau componentDidMount dari ListPage untuk membuat permintaan, dan bahkan berpikir dari perspektif render server. , Anda dapat menambahkan siklus hidup tambahan (seperti getInitProps dari next.js) yang bertanggung jawab untuk mendeklarasikan ketergantungan data awal dari jenis halaman ini.

Cara saat ini menempatkan ketergantungan data awal halaman ke dalam subcription model, saya punya pertanyaan berikut:

  1. Pengulangan logika pencocokan url: Ini adalah tanggung jawab router untuk mengurai parameter url dan meneruskannya ke logika bisnis. Dari contoh hackernews, kita dapat melihat bahwa beberapa di antaranya telah diulang, dan bahkan relatif "tingkat rendah" perpustakaan seperti pathToRegex (di belakang react-router/express) Ini juga digunakan untuk pencocokan dan penguraian URL)
  2. Pemisahan tugas: Praktik yang berbeda sesuai dengan semantik yang berbeda. Apakah halaman menyatakan data mana yang bergantung pada halaman, atau apakah model menyatakan di bawah url mana untuk melakukan pemuatan data?
  3. Halaman kehilangan kendali atas permintaan. Jika halaman ingin mengeksekusi logika tertentu setelah permintaan berhasil atau gagal, itu akan lebih sulit untuk diterapkan, karena halaman itu sendiri tidak menyadari tindakan memuat data
  4. Cara menangani skenario render/isomorfik server sebenarnya merupakan kelanjutan dari 3. Di bawah render server, Anda perlu "memuat data yang bergantung pada halaman terlebih dahulu, lalu melakukan rendering halaman", dan jika pernyataan permintaan tidak di tingkat halaman sama sekali, ini harus dilakukan. Ini lebih merepotkan
  5. Desain berlangganan tampaknya dipengaruhi oleh elm, tetapi berlangganan di elm sebenarnya tidak banyak digunakan, hanya digunakan untuk menangani skenario seperti websocket. Permintaan awal masih dilakukan melalui pernyataan halaman init.

Tentu saja, dva tidak membatasi metode mana yang digunakan. Sangat layak untuk menggunakan siklus hidup komponen halaman di dva, tetapi saya pikir dokumen resmi dan contoh yang memiliki efek demonstratif menggunakan metode lain. Sangat mungkin bahwa Saya Saya tidak tahu pertimbangannya, saya menambahkan pertanyaan grup WeChat sebelumnya, tetapi saya tidak bisa mendapatkan jawabannya (seorang teman mengatakan bahwa itu karena dva berharap komponen halaman juga merupakan komponen fungsional, yang memang merupakan poin, tetapi itu sepertinya tidak begitu persuasif), jadi saya membuka masalah. Maafkan saya karena mengganggu saya.
@maafcc

discussion wontfix

Semua 3 komentar

inisitif model

              邮箱:[email protected]

Tanda tangan dikustomisasi oleh NetEase Mail Master Pukul 16:30 tanggal 17 Desember 2017, Qin Junwen menulis: Dalam dokumen resmi dan contoh berita peretas, metode mendengarkan url riwayat yang cocok dalam langganan model digunakan untuk memuat data awal untuk halaman sebagai berikut.
//Dari dokumentasi api
aplikasi.model({
ruang nama: 'harus',
// ...
langganan: {
setup({ sejarah, pengiriman }) {
// Perubahan histori (url) berlangganan, memicu tindakan load jika nama jalur adalah /
kembali history.listen(({ pathname }) => {
if (nama jalur =='/') {
pengiriman({ ketik:'muat' });
}
});
},
},
});
Portal: model item yang ditulis serupa dari dva-hackernews
Ini berbeda dari apa yang biasanya kita lihat saat memuat data dalam siklus hidup komponen halaman. Misalnya, dalam contoh yang sama dari hackernews, kita dapat memilih untuk mengirimkan tindakan efek yang sesuai di componentWillMount atau componentDidMount dari ListPage untuk membuat permintaan , dan bahkan berpikir dari perspektif render server. , Anda dapat menambahkan siklus hidup tambahan (seperti getInitProps dari next.js) yang bertanggung jawab untuk mendeklarasikan ketergantungan data awal halaman ini.
Cara saat ini menempatkan ketergantungan data awal halaman ke dalam subcription model, saya punya pertanyaan berikut:

Pengulangan logika pencocokan url: Ini adalah tanggung jawab router untuk mengurai parameter url dan meneruskannya ke logika bisnis. Dari contoh hackernews, kita dapat melihat bahwa beberapa di antaranya telah diulang, dan bahkan relatif "tingkat rendah" perpustakaan seperti pathToRegex (di belakang react-router/express) Ini juga digunakan untuk pencocokan dan penguraian URL)
Pemisahan tugas: Praktik yang berbeda sesuai dengan semantik yang berbeda. Apakah halaman menyatakan data mana yang bergantung pada halaman, atau apakah model menyatakan di bawah url mana untuk melakukan pemuatan data?
Halaman kehilangan kendali atas permintaan. Jika halaman ingin mengeksekusi logika tertentu setelah permintaan berhasil atau gagal, itu akan lebih sulit untuk diterapkan, karena halaman itu sendiri tidak memiliki persepsi tentang tindakan memuat data bagaimana menangani render server /skenario isomorfik. Faktanya, ini adalah kelanjutan dari 3. Di bawah render server, Anda perlu "memuat data yang bergantung pada halaman terlebih dahulu, dan kemudian melakukan rendering halaman", dan jika pernyataan permintaan tidak ada di tingkat halaman sama sekali, akan lebih merepotkan untuk melakukan ini.
Desain berlangganan tampaknya dipengaruhi oleh elm, tetapi berlangganan di elm sebenarnya tidak banyak digunakan, hanya digunakan untuk menangani skenario seperti websocket. Permintaan awal masih dilakukan melalui pernyataan halaman init.

Tentu saja, dva tidak membatasi metode mana yang digunakan. Sangat layak untuk menggunakan siklus hidup komponen halaman di dva, tetapi saya pikir dokumen resmi dan contoh yang memiliki efek demonstratif menggunakan metode lain. Sangat mungkin bahwa Saya Saya tidak tahu pertimbangannya, saya menambahkan pertanyaan grup WeChat sebelumnya, tetapi saya tidak bisa mendapatkan jawabannya (seorang teman mengatakan bahwa itu karena dva berharap komponen halaman juga merupakan komponen fungsional, yang memang merupakan poin, tetapi itu sepertinya tidak begitu persuasif), jadi saya membuka masalah. Maafkan saya karena mengganggu saya.
@maaf

—Anda menerima ini karena Anda berlangganan utas ini. Balas email ini secara langsung, lihat di GitHub, atau matikan utas.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/dvajs/dva","title ":"dvajs/dva","subtitle":"Repositori 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":"Buka di GitHub", "url":" https://github.com/dvajs/dva "}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"[Diskusi]-Tentang halaman Masalah ketergantungan data (#1402)"}],"action":{"name":"View Issue","url":" https://github.com/dvajs/dva/issues/1402 "}}}

@yangbin1994

Apa pendapat model?
Saya tidak melihatnya di dokumen model .

Dengan asumsi ada Hook ini, tampaknya pada dasarnya tidak berbeda dengan melakukannya di langganan. 1-4 pertanyaan di atas masih ada.

Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat