Dva: [Discussão] - Declaração sobre a dependência de dados inicial da página

Criado em 17 dez. 2017  ·  3Comentários  ·  Fonte: dvajs/dva

No documento oficial e no exemplo do hackernews, o método de ouvir o URL do histórico correspondente na assinatura do modelo é usado para carregar os dados iniciais da página, como segue.

//摘自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 item escrito de forma semelhante

Isso é diferente de carregar dados durante o ciclo de vida dos componentes da página. Por exemplo, no mesmo exemplo de hackernews, podemos escolher despachar a ação de efeitos correspondente em componentWillMount ou componentDidMount de ListPage para fazer a solicitação, e até mesmo pensar no perspectiva de renderização do servidor., Você pode adicionar um ciclo de vida adicional (como getInitProps de next.js) para ser responsável por declarar a dependência de dados inicial deste tipo de página.

A maneira atual de colocar a dependência de dados inicial da página na assinatura do modelo, tenho as seguintes perguntas:

  1. Repetição da lógica de correspondência de url: É responsabilidade do roteador analisar os parâmetros de url e encaminhá-los para a lógica de negócios. Pelo exemplo do hackernews, podemos ver que alguns deles foram repetidos, e até mesmo um nível relativamente "baixo" biblioteca como pathToRegex (atrás de react-router / express) Também é usada para correspondência e análise de URL)
  2. Separação de tarefas: práticas diferentes correspondem a semânticas diferentes. A página declara de quais dados a página depende ou o modelo declara em qual url realizar o carregamento de dados?
  3. A página perde o controle da solicitação. Se uma página deseja executar uma lógica específica após a solicitação ser bem-sucedida ou falhar, será mais difícil de implementar, porque a própria página não está ciente da ação de carregamento de dados
  4. Como lidar com cenários isomórficos / renderização do servidor é na verdade uma continuação de 3. Na renderização do servidor, você precisa "carregar os dados dos quais a página depende primeiro e, em seguida, executar a renderização da página", e se a instrução da solicitação não for no nível da página, isso deve ser feito. É mais problemático
  5. O design da assinatura parece ser afetado pelo elm, mas na verdade a assinatura no elm não é muito usada. É usada apenas para lidar com cenários como websocket. A solicitação inicial ainda é feita por meio da instrução de página init.

Claro, dva não limita qual método é usado. É totalmente viável usar o ciclo de vida de componentes de página em dva, mas acho que os documentos oficiais e exemplos que têm um efeito demonstrativo usam outro método. É muito provável que Não sei as considerações, acrescentei uma pergunta do grupo WeChat antes, mas não consegui obter a resposta (um amigo disse que é porque o dva espera que os componentes da página também sejam funcionais, o que de fato é um ponto, mas não parece ser tão convincente), então abri um exemplar. Perdoe-me por me incomodar.
@sorrycc

discussion wontfix

Todos 3 comentários

inithook do modelo

              邮箱:[email protected]

A assinatura foi personalizada pelo NetEase Mail Master. Às 16h30 de 17 de dezembro de 2017, Qin Junwen escreveu: No documento oficial e no exemplo do hackernews, o método de ouvir o URL do histórico correspondente na assinatura do modelo é usado para carregar os dados iniciais para a página. como segue.
// Da documentação da API
app.model ({
namespace: 'todo',
// ...
assinaturas: {
configuração ({histórico, despacho}) {
// Alteração do histórico de inscrição (url), aciona load action se o nome do caminho for /
return history.listen (({pathname}) => {
if (nome do caminho === '/') {
despachar ({tipo: 'carregar'});
}
});
},
},
});
Portal: modelo de item escrito de forma semelhante de dva-hackernews
Isso é diferente do que normalmente vemos ao carregar dados no ciclo de vida dos componentes da página. Por exemplo, no mesmo exemplo de hackernews, podemos escolher despachar a ação de efeitos correspondente em componentWillMount ou componentDidMount de ListPage para fazer a solicitação , e até mesmo pensar da perspectiva da renderização do servidor., Você pode adicionar um ciclo de vida adicional (como getInitProps de next.js) para ser responsável por declarar a dependência de dados inicial desta página.
A maneira atual de colocar a dependência de dados inicial da página na assinatura do modelo, tenho as seguintes perguntas:

Repetição da lógica de correspondência de url: É responsabilidade do roteador analisar os parâmetros de url e encaminhá-los para a lógica de negócios. Pelo exemplo do hackernews, podemos ver que alguns deles foram repetidos, e até mesmo um nível relativamente "baixo" biblioteca como pathToRegex (atrás de react-router / express) Também é usada para correspondência e análise de URL)
Separação de tarefas: práticas diferentes correspondem a semânticas diferentes. A página declara de quais dados a página depende ou o modelo declara em qual url realizar o carregamento de dados?
A página perde o controle da solicitação. Se uma página deseja executar uma lógica específica após a solicitação ser bem-sucedida ou falhar, será mais difícil de implementar, porque a própria página não tem percepção da ação de carregar dados como lidar com a renderização do servidor / cenários isomórficos. Na verdade, é uma continuação de 3. Na renderização do servidor, você precisa "carregar os dados dos quais a página depende primeiro e, em seguida, executar a renderização da página", e se a instrução da solicitação não estiver no nível de página em tudo, será mais problemático fazer isso.
O design da assinatura parece ser afetado pelo elm, mas na verdade a assinatura no elm não é muito usada. É usada apenas para lidar com cenários como websocket. A solicitação inicial ainda é feita por meio da instrução de página init.

Claro, dva não limita qual método é usado. É totalmente viável usar o ciclo de vida de componentes de página em dva, mas acho que os documentos oficiais e exemplos que têm um efeito demonstrativo usam outro método. É muito provável que Não sei as considerações, acrescentei uma pergunta do grupo WeChat antes, mas não consegui obter a resposta (um amigo disse que é porque o dva espera que os componentes da página também sejam funcionais, o que de fato é um ponto, mas não parece ser tão convincente), então abri um exemplar. Perdoe-me por me incomodar.
@sorrycc

—Você está recebendo isto porque está inscrito neste tópico. Responda a este e-mail diretamente, visualize-o no GitHub ou ignore o tópico.

{"api_version": "1.0", "publisher": {"api_key": "05dde50f1d1a384dd78767c55493e4bb", "name": "GitHub"}, "entity": {"external_key": "github / dvajs / dva", "title ":" dvajs / dva "," subtitle ":" Repositório 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": "Open in GitHub", "url": " https://github.com/dvajs/dva "}}, "updates": {"snippets": [{"icon": "DESCRIPTION", "message": "[Discussion] -Sobre a página Problemas de dependência de dados (# 1402) "}]," action ": {" name ":" View Issue "," url ":" https://github.com/dvajs/dva/issues/1402 "}}}

@ yangbin1994

Qual é o inithook do modelo?
Não o vi no documento modelo .

Supondo que haja esse Gancho, ele não parece ser essencialmente diferente de fazê-lo na assinatura. As 1-4 questões acima ainda existem.

Este problema foi marcado automaticamente como obsoleto porque não teve atividades recentes. Ele será fechado se nenhuma outra atividade ocorrer. Obrigado por suas contribuições.

Esta página foi útil?
0 / 5 - 0 avaliações