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:
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
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.