Dva: [Discusión] -Enunciado sobre la dependencia de datos inicial de la página

Creado en 17 dic. 2017  ·  3Comentarios  ·  Fuente: dvajs/dva

En el documento oficial y el ejemplo de hackernews, el método de escuchar la URL del historial coincidente en la suscripción del modelo se utiliza para cargar los datos iniciales de la página, de la siguiente manera.

//摘自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: modelo de elemento escrito de manera similar

Esto es diferente de cargar datos durante el ciclo de vida de los componentes de la página. Por ejemplo, en el mismo ejemplo de hackernews, podemos elegir enviar la acción de efectos correspondiente en el componenteWillMount o el componenteDidMount de ListPage para realizar la solicitud, e incluso pensar desde el perspectiva de la representación del servidor., Puede agregar un ciclo de vida adicional (como getInitProps de next.js) para ser responsable de declarar la dependencia de datos inicial de este tipo de página.

La forma actual de poner la dependencia de datos inicial de la página en la suscripción del modelo, tengo las siguientes preguntas:

  1. Repetición de la lógica de coincidencia de URL: es responsabilidad del enrutador analizar los parámetros de la URL y reenviarlos a la lógica empresarial. En el ejemplo de hackernews, podemos ver que algunos de ellos se han repetido, e incluso un nivel relativamente "bajo". biblioteca como pathToRegex (detrás de react-router / express) También se utiliza para la comparación y el análisis de URL)
  2. Separación de funciones: Diferentes prácticas corresponden a diferentes semánticas ¿La página declara de qué datos depende la página o el modelo declara bajo qué url realizar la carga de datos?
  3. La página pierde el control de la solicitud. Si una página quiere ejecutar una lógica específica después de que la solicitud tiene éxito o falla, será más difícil de implementar, porque la página en sí no es consciente de la acción de cargar datos.
  4. Cómo lidiar con los escenarios de renderizado / isomorfos del servidor es en realidad una continuación de 3. En el renderizado del servidor, primero debe "cargar los datos de los que depende la página y luego realizar el renderizado de la página", y si la declaración de la solicitud no es en el nivel de la página, esto debería hacerse. Es más problemático
  5. El diseño de la suscripción parece verse afectado por elm, pero la suscripción en elm en realidad no se usa mucho. Solo se usa para tratar escenarios como websocket. La solicitud inicial aún se realiza a través de la declaración de página init.

Por supuesto, dva no limita qué método se utiliza. Es completamente factible utilizar el ciclo de vida de los componentes de la página en dva, pero creo que los documentos oficiales y ejemplos que tienen un efecto demostrativo utilizan otro método. Es muy probable que No conozco las consideraciones, agregué una pregunta grupal de WeChat antes, pero no pude obtener la respuesta (un amigo dijo que es porque dva espera que los componentes de la página también sean componentes funcionales, lo que de hecho es un punto, pero no parece ser tan persuasivo), así que abrí un número Perdóname por molestarme.
@ lo siento

discussion wontfix

Todos 3 comentarios

modelo de inithook

              邮箱:[email protected]

La firma fue personalizada por NetEase Mail Master. A las 16:30 del 17 de diciembre de 2017, Qin Junwen escribió: En el documento oficial y el ejemplo de hackernews, el método de escuchar la URL del historial coincidente en la suscripción del modelo se utiliza para cargar los datos iniciales. para la página de la siguiente manera.
// De la documentación de la api
app.model ({
espacio de nombres: 'todo',
// ...
suscripciones: {
configuración ({historial, envío}) {
// Cambio del historial de suscripción (url), activa la acción load si el nombre de la ruta es /
return history.listen (({nombre de ruta}) => {
if (nombre de ruta === '/') {
despacho ({tipo: 'carga'});
}
});
},
},
});
Portal: modelo de elemento escrito de manera similar de dva-hackernews
Esto es diferente de lo que solemos ver al cargar datos en el ciclo de vida de los componentes de la página. Por ejemplo, en el mismo ejemplo de hackernews, podemos elegir enviar la acción de efectos correspondiente en el componenteWillMount o el componenteDidMount del ListPage para realizar la solicitud , e incluso piense desde la perspectiva del renderizado del servidor. Puede agregar un ciclo de vida adicional (como getInitProps de next.js) para ser responsable de declarar la dependencia de datos inicial de esta página.
La forma actual de poner la dependencia de datos inicial de la página en la suscripción del modelo, tengo las siguientes preguntas:

Repetición de la lógica de coincidencia de URL: es responsabilidad del enrutador analizar los parámetros de la URL y reenviarlos a la lógica empresarial. En el ejemplo de hackernews, podemos ver que algunos de ellos se han repetido, e incluso un nivel relativamente "bajo". biblioteca como pathToRegex (detrás de react-router / express) También se utiliza para la comparación y el análisis de URL)
Separación de funciones: Diferentes prácticas corresponden a diferentes semánticas ¿La página declara de qué datos depende la página o el modelo declara bajo qué url realizar la carga de datos?
La página pierde el control de la solicitud. Si una página quiere ejecutar una lógica específica después de que la solicitud sea exitosa o falla, será más difícil de implementar, porque la página en sí no tiene percepción de la acción de cargar datos sobre cómo lidiar con el procesamiento del servidor. / escenarios isomorfos. De hecho, es una continuación de 3. En la representación del servidor, debe "cargar los datos de los que depende la página primero y luego realizar la representación de la página", y si la declaración de la solicitud no está en el nivel de página en absoluto, será más problemático hacer esto.
El diseño de la suscripción parece verse afectado por elm, pero la suscripción en elm en realidad no se usa mucho. Solo se usa para tratar escenarios como websocket. La solicitud inicial aún se realiza a través de la declaración de página init.

Por supuesto, dva no limita qué método se utiliza. Es completamente factible utilizar el ciclo de vida de los componentes de la página en dva, pero creo que los documentos oficiales y ejemplos que tienen un efecto demostrativo utilizan otro método. Es muy probable que No conozco las consideraciones, agregué una pregunta grupal de WeChat antes, pero no pude obtener la respuesta (un amigo dijo que es porque dva espera que los componentes de la página también sean componentes funcionales, lo que de hecho es un punto, pero no parece ser tan persuasivo), así que abrí un número Perdóname por molestarme.
@ lo siento

—Está recibiendo esto porque está suscrito a este hilo. Responda a este correo electrónico directamente, véalo en GitHub o silencia el hilo.

{"api_version": "1.0", "publisher": {"api_key": "05dde50f1d1a384dd78767c55493e4bb", "name": "GitHub"}, "entity": {"external_key": "github / dvajs / dva", "title ":" dvajs / dva "," subtitle ":" Repositorio de 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": "Abrir en GitHub", "url": " https://github.com/dvajs/dva "}}, "updates": {"snippets": [{"icon": "DESCRIPTION", "message": "[Discusión] -Acerca de la página Problemas de dependencia de datos (# 1402) "}]," action ": {" name ":" Ver problema "," url ":" https://github.com/dvajs/dva/issues/1402 "}}}

@ yangbin1994

¿Cuál es el inithook del modelo?
No lo vi en el documento modelo .

Suponiendo que existe este Hook, no parece ser esencialmente diferente de hacerlo en la suscripción.Las 1-4 preguntas anteriores todavía existen.

Este problema se ha marcado automáticamente como obsoleto porque no ha tenido actividad reciente. Se cerrará si no se produce más actividad. Gracias por sus aportaciones.

¿Fue útil esta página
0 / 5 - 0 calificaciones