Dva: [Diskussion]-Statement zur initialen Datenabhängigkeit der Seite

Erstellt am 17. Dez. 2017  ·  3Kommentare  ·  Quelle: dvajs/dva

Im offiziellen Dokument- und Hackernews-Beispiel wird die Methode zum Abhören der übereinstimmenden Verlaufs-URL im Abonnement des Modells verwendet, um die Anfangsdaten für die Seite wie folgt zu laden.

//摘自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: ähnlich geschriebenes Artikelmodell von dva-hackernews

Dies unterscheidet sich vom Laden von Daten während des Lebenszyklus von Seitenkomponenten.Zum Beispiel können wir im gleichen Beispiel von Hackernews wählen, ob wir die entsprechende Wirkungsaktion in der KomponenteWillMount oder KomponenteDidMount von ListPage auslösen , um die Anfrage zu stellen, und sogar an die Perspektive des Server-Rendering. , Sie können einen zusätzlichen Lebenszyklus (wie getInitProps von next.js) hinzufügen, der für die Deklaration der anfänglichen Datenabhängigkeit dieser Art von Seite verantwortlich ist.

Die aktuelle Art, die anfängliche Datenabhängigkeit der Seite in das Abonnement des Modells einzufügen, habe ich folgende Fragen:

  1. Wiederholung der URL-Match-Logik: Es liegt in der Verantwortung des Routers, die URL-Parameter zu parsen und an die Geschäftslogik weiterzuleiten. Am Beispiel von Hackernews können wir sehen, dass einige von ihnen wiederholt wurden, und sogar relativ "low-level". Bibliothek wie pathToRegex (hinter React-Router/Express) Wird auch für URL-Matching und Parsing verwendet)
  2. Aufgabentrennung: Unterschiedliche Praktiken entsprechen unterschiedlicher Semantik: Deklariert die Seite, von welchen Daten die Seite abhängt, oder gibt das Modell an, unter welcher URL die Daten geladen werden sollen?
  3. Die Seite verliert die Kontrolle über die Anfrage. Wenn eine Seite eine bestimmte Logik ausführen möchte, nachdem die Anfrage erfolgreich war oder fehlschlägt, ist die Implementierung schwieriger, da die Seite selbst die Aktion des Ladens von Daten nicht wahrnimmt.
  4. Wie man mit Server-Rendering/isomorphen Szenarien umgeht, ist eigentlich eine Fortsetzung von 3. Unter Server-Rendering müssen Sie "zuerst die Daten laden, von denen die Seite abhängt, und dann das Seiten-Rendering durchführen", und wenn die Anweisung der Anforderung nicht lautet auf Seitenebene sollte dies getan werden. Es ist mühsamer
  5. Das Design von Subscription scheint von elm beeinflusst zu sein, aber Subscription in elm wird eigentlich nicht viel verwendet.Es wird nur verwendet, um mit Szenarien wie Websocket umzugehen.Die anfängliche Anfrage erfolgt immer noch über die Seitenanweisung init.

Natürlich schränkt dva nicht ein
@sorrycc

discussion wontfix

Alle 3 Kommentare

Initook des Modells

              邮箱:[email protected]

Die Signatur wurde von NetEase Mail Master angepasst. Um 16:30 Uhr am 17. Dezember 2017 schrieb Qin Junwen: Im offiziellen Dokument und Hackernews-Beispiel wird die Methode zum Abhören der übereinstimmenden Verlaufs-URL im Abonnement des Modells verwendet, um die Anfangsdaten zu laden für die Seite wie folgt.
//Aus der API-Dokumentation
app.modell({
Namensraum:'todo',
// ...
Abonnements: {
setup({ Geschichte, Versand }) {
// Abonnieren des Verlaufs (URL) ändern, Aktion load auslösen, wenn Pfadname /
return history.listen(({ Pfadname}) => {
if (Pfadname ==='/') {
Dispatch({ type:'load'});
}
});
},
},
});
Portal: ähnlich geschriebenes Artikelmodell von dva-hackernews
Dies unterscheidet sich von dem, was wir normalerweise beim Laden von Daten im Lebenszyklus von Seitenkomponenten sehen. Zum Beispiel können wir im gleichen Beispiel von Hackernews wählen, ob wir die entsprechende Effektaktion in der componentWillMount oder componentDidMount der ListPage auslösen, um die Anfrage zu stellen , und denken Sie sogar aus der Perspektive des Server-Rendering. , Sie können einen zusätzlichen Lebenszyklus (wie getInitProps von next.js) hinzufügen, der für die Deklaration der anfänglichen Datenabhängigkeit dieser Seite verantwortlich ist.
Die aktuelle Art, die anfängliche Datenabhängigkeit der Seite in das Abonnement des Modells einzufügen, habe ich folgende Fragen:

Wiederholung der URL-Match-Logik: Es liegt in der Verantwortung des Routers, die URL-Parameter zu parsen und an die Geschäftslogik weiterzuleiten. Am Beispiel von Hackernews können wir sehen, dass einige von ihnen wiederholt wurden, und sogar relativ "low-level". Bibliothek wie pathToRegex (hinter React-Router/Express) Wird auch für URL-Matching und Parsing verwendet)
Aufgabentrennung: Unterschiedliche Praktiken entsprechen unterschiedlicher Semantik: Deklariert die Seite, von welchen Daten die Seite abhängt, oder gibt das Modell an, unter welcher URL die Daten geladen werden sollen?
Die Seite verliert die Kontrolle über die Anfrage. Wenn eine Seite eine bestimmte Logik ausführen möchte, nachdem die Anfrage erfolgreich war oder fehlschlägt, wird dies schwieriger zu implementieren, da die Seite selbst die Aktion beim Laden von Daten nicht wahrnimmt, wie mit Server-Rendering umgegangen wird /isomorphe Szenarien. Tatsächlich ist es eine Fortsetzung von 3. Unter Server-Rendering müssen Sie "zuerst die Daten laden, von denen die Seite abhängt, und dann das Seiten-Rendering durchführen", und wenn die Anweisung der Anforderung nicht am Seitenebene überhaupt, wird es mühsamer, dies zu tun.
Das Design von Subscription scheint von elm beeinflusst zu sein, aber Subscription in elm wird eigentlich nicht viel verwendet.Es wird nur verwendet, um mit Szenarien wie Websocket umzugehen.Die anfängliche Anfrage erfolgt immer noch über die Seitenanweisung init.

Natürlich schränkt dva nicht ein, welche Methode verwendet wird. Es ist durchaus möglich, den Lebenszyklus von Seitenkomponenten in dva zu verwenden, aber ich denke, dass die offiziellen Dokumente und Beispiele, die eine demonstrierende Wirkung haben, eine andere Methode verwenden. Es ist sehr wahrscheinlich, dass Ich kenne die Überlegungen nicht, ich habe zuvor eine WeChat-Gruppenfrage hinzugefügt, aber ich konnte keine Antwort erhalten (ein Freund sagte, dass es daran liegt, dass dva hofft, dass Seitenkomponenten auch funktionale Komponenten sind, was in der Tat ein Punkt ist, aber es scheint nicht so überzeugend zu sein), also habe ich ein Thema eröffnet. Verzeihen Sie, dass ich mich belästige.
@sorrycc

– Sie erhalten dies, weil Sie diesen Thread abonniert haben. Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an oder schalten Sie den Thread stumm.

{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/dvajs/dva","title ":"dvajs/dva","subtitle":"GitHub-Repository","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":"In GitHub öffnen", "url":" https://github.com/dvajs/dva "}},"updates":{"snippets":[{"icon":"DESCRIPTION","message":"[Diskussion]-Über die Seite Datenabhängigkeitsprobleme (#1402)"}],"action":{"name":"Problem anzeigen","url":" https://github.com/dvajs/dva/issues/1402 "}}}

@yangbin1994

Was ist der Initook des Modells?
Im Modelldokument habe ich es nicht gesehen.

Unter der Annahme, dass es diesen Hook gibt, scheint er sich nicht wesentlich von dem im Abonnement zu unterscheiden.Die obigen 1-4 Fragen bestehen noch.

Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivität hatte. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen