He estado jugando con React y hasta ahora me gusta mucho. Estoy creando una aplicación con NodeJS y me gustaría usar React para algunos de los componentes interactivos de la aplicación. No quiero que sea una aplicación de una sola página.
Todavía no he encontrado nada en la web que responda a las siguientes preguntas:
¿Cómo puedo dividir o agrupar mis componentes de React en una aplicación de varias páginas?
Actualmente, todos mis componentes están en un archivo, aunque es posible que nunca los cargue en algunas secciones de la aplicación.
Hasta ahora, estoy tratando de usar declaraciones condicionales para representar componentes buscando el ID del contenedor donde reaccionará. No estoy 100% seguro de cuáles son las mejores prácticas con React. Se parece a esto.
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')
);
}
Todavía estoy leyendo la documentación y todavía no he encontrado lo que necesito para una aplicación de varias páginas.
Gracias por adelantado.
fuente
render
el componente correcto en unscript
bloque.Respuestas:
Actualmente, estoy haciendo algo similar.
La aplicación no es una aplicación React completa, estoy usando React para cosas dinámicas, como CommentBox, que es autark. Y se puede incluir en cualquier Punto con parámetros especiales.
Sin embargo, todas mis aplicaciones secundarias se cargan e incluyen en un solo archivo
all.js
, por lo que el navegador puede almacenarlo en caché en todas las páginas.Cuando necesito incluir una aplicación en las plantillas SSR, solo tengo que incluir un DIV con la clase "__react-root" y una ID especial (el nombre de la aplicación React que se va a renderizar)
La lógica es realmente simple:
Editar
Dado que el paquete web admite perfectamente la división de código y LazyLoading, pensé que tenía sentido incluir un ejemplo en el que no necesita cargar todas sus aplicaciones en un paquete, sino dividirlas y cargarlas a pedido.
fuente
create react app
le ofrece herramientas fáciles de crearbundle.js
. Entonces, el propósito de mi respuesta es usar el mismobundle.js
y usarlo en múltiples sitios SSR, y cargar muchas aplicaciones React diferentes en una sola página. Lo siento, si mi respuesta no se ajusta a sus necesidades, no dude en crear una nueva publicación y describir lo que está tratando de hacer, trataría de ayudarlo.Puede proporcionar varios puntos de entrada para la aplicación en el archivo webpack.config.js:
entonces puede tener en su carpeta src tres archivos html diferentes con sus respectivos archivos js (ejemplo para page1):
Archivo JavaScript:
A continuación, se pueden cargar diferentes componentes de React para cada página.
fuente
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.
Entonces, ¿debería actualizarse esta muestra para webpack 4+?Estoy construyendo una aplicación desde cero y voy aprendiendo sobre la marcha, pero creo que lo que estás buscando es React-Router . React-Router asigna sus componentes a URL específicas. Por ejemplo:
En el caso de búsqueda, se puede acceder a 'término' como una propiedad en AnimalSearchBox:
Pruébalo. Este tutorial es el que me puso en la cima en términos de mi comprensión de este y otros temas relacionados.
La respuesta original es la siguiente:
Encontré mi camino aquí buscando la misma respuesta. Mira si esta publicación te inspira. Si su aplicación es como la mía, tendrá áreas que cambian muy poco y varían solo en el cuerpo principal. Puede crear un widget cuya responsabilidad sea representar un widget diferente en función del estado de la aplicación. Usando una arquitectura de flujo, podría enviar una acción de navegación que cambie el estado en el que cambia el widget de su cuerpo, actualizando de manera efectiva solo el cuerpo de la página.
Ese es el enfoque que estoy intentando ahora.
fuente
Router
Funcionará de la misma manera que lo hace en una aplicación de una sola página?¿Estás usando un CMS? A ellos les suele gustar cambiar las URL, lo que podría dañar tu aplicación.
Otra forma es usar algo como React Habitat .
Con él, puede registrar componentes y automáticamente quedan expuestos al dom.
Ejemplo
Registrar componente (s):
Entonces están disponibles en tu dom así:
Lo anterior se reemplazará automáticamente con sus componentes de reacción.
Luego, también puede pasar propiedades (o accesorios) automáticamente a sus componentes:
Esto lo expondrá
size
como apoyo a su componente. Hay opciones adicionales para pasar otros tipos como json, array's, ints, floats, etc.fuente
Sé que ha pasado un tiempo desde que se hizo esta pregunta, pero espero que esto ayude a alguien.
Como mencionó @Cocomico, podría proporcionar varios puntos de entrada para la aplicación en el archivo webpack.config.js. Si está buscando una configuración de Webpack simple (basada en la idea de múltiples puntos de entrada) que le permita agregar componentes React a páginas estáticas, puede considerar usar esto: https://github.com/przemek-nowicki/multi-page -app-with-react
fuente
Te sugiero que eches un vistazo a InertiaJS: https://inertiajs.com/
fuente