Eu tenho brincado com o React e até agora eu realmente gosto. Estou criando um aplicativo com o NodeJS e gostaria de usar o React para alguns dos componentes interativos no aplicativo. Eu não quero torná-lo aplicativo de página única.
Ainda não encontrei nada na web que responda às seguintes perguntas:
Como separo ou agrupo meus componentes do React em um aplicativo de várias páginas?
Atualmente, todos os meus componentes estão em um arquivo, mesmo que eu nunca os carregue em algumas seções do aplicativo.
Até agora, estou tentando usar instruções condicionais para renderizar componentes pesquisando o ID do contêiner no qual o React será renderizado. Não tenho 100% de certeza sobre quais são as melhores práticas com o React. Parece algo assim.
if(document.getElementById('a-compenent-in-page-1')) {
React.render(
<AnimalBox url="/api/birds" />,
document.getElementById('a-compenent-in-page-1')
);
}
if(document.getElementById('a-compenent-in-page-2')) {
React.render(
<AnimalBox url="/api/cats" />,
document.getElementById('a-compenent-in-page-2')
);
}
if(document.getElementById('a-compenent-in-page-3')) {
React.render(
<AnimalSearchBox url="/api/search/:term" />,
document.getElementById('a-compenent-in-page-3')
);
}
Ainda estou lendo a documentação e ainda não encontrei o que preciso para um aplicativo de várias páginas.
Desde já, obrigado.
fonte
render
o componente correto em umscript
bloco.Respostas:
Atualmente, estou fazendo algo semelhante.
O aplicativo não é um aplicativo React completo, estou usando o React para coisas dinâmicas, como o CommentBox, que é autark. E pode ser incluído em qualquer ponto com parâmetros especiais.
No entanto, todos os meus sub-aplicativos são carregados e incluídos em um único arquivo
all.js
, para que possam ser armazenados em cache pelo navegador entre as páginas.Quando preciso incluir um aplicativo nos modelos SSR, só preciso incluir um DIV com a classe "__react-root" e um ID especial (o nome do aplicativo de reação a ser renderizado)
A lógica é realmente simples:
Editar
Como o webpack suporta perfeitamente a divisão de código e o LazyLoading, achei bom incluir um exemplo em que você não precisa carregar todos os aplicativos em um único pacote, mas dividi-los e carregá-los sob demanda.
fonte
create react app
fornece ferramentas fáceis de criarbundle.js
. Portanto, o objetivo da minha resposta é usar o mesmobundle.js
e usá-lo em vários sites SSR e carregar muitos aplicativos React diferentes em uma única página. Desculpe, se minha resposta não se adequar às suas necessidades, fique à vontade para criar uma nova postagem e descrever o que você está tentando fazer, tentarei ajudá-lo.Você pode fornecer vários pontos de entrada para o aplicativo no arquivo webpack.config.js:
você pode ter na pasta src três arquivos html diferentes com seus respectivos arquivos js (exemplo para a página 1):
Arquivo JavaScript:
Diferentes componentes do React podem ser carregados para cada página.
fonte
webpack version < 4 it was common to add vendors as separate entrypoint to compile it as separate file (in combination with the CommonsChunkPlugin). This is discouraged in webpack 4. Instead the optimization.splitChunks option takes care of separating vendors and app modules and creating a separate file. Do not create a entry for vendors or other stuff which is not the starting point of execution.
Portanto, este exemplo deve ser atualizado para o webpack 4+?Estou construindo um aplicativo desde o início e aprendendo à medida que passo, mas acho que o que você está procurando é o React-Router . O React-Router mapeia seus componentes para URLs específicos. Por exemplo:
No caso de pesquisa, 'termo' pode ser acessado como uma propriedade no AnimalSearchBox:
Experimente. Este tutorial foi o que me destacou em termos de compreensão deste e de outros tópicos relacionados.
A resposta original segue:
Eu encontrei o meu caminho aqui procurando a mesma resposta. Veja se este post o inspira. Se o seu aplicativo for como o meu, ele terá áreas que mudam muito pouco e variam apenas no corpo principal. Você pode criar um widget cuja responsabilidade é renderizar um widget diferente com base no estado do aplicativo. Usando uma arquitetura de fluxo, você pode despachar uma ação de navegação que altera o estado em que seu widget de corpo muda, atualizando efetivamente apenas o corpo da página.
Essa é a abordagem que estou tentando agora.
fonte
Router
mesma maneira que em um aplicativo de página única?Você está usando um CMS? Eles tendem a gostar de alterar os URLs que podem interromper seu aplicativo.
Outra maneira é usar algo como React Habitat .
Com ele, você pode registrar componentes e eles são automaticamente expostos ao dom.
Exemplo
Registrar componente (s):
Então eles estão disponíveis no seu domínio assim:
O acima será automaticamente substituído pelos seus componentes de reação.
Você também pode passar automaticamente propriedades (ou suportes) para seus componentes:
Isso será exposto
size
como um suporte ao seu componente. Existem opções adicionais para passar outros tipos, como json, array, ints, floats etc.fonte
Eu sei que já faz um tempo desde que essa pergunta foi feita, mas espero que isso ajude alguém.
Como o @Cocomico mencionou, você pode fornecer vários pontos de entrada para o aplicativo no arquivo webpack.config.js. Se você estiver procurando por uma configuração simples do Webpack (com base na idéia de vários pontos de entrada) que permita adicionar componentes do React a páginas estáticas, considere o seguinte: https://github.com/przemek-nowicki/multi-page -app-with-react
fonte
Sugiro que você dê uma olhada no InertiaJS: https://inertiajs.com/
fonte