J'ai joué avec React et jusqu'à présent, je l'aime vraiment. Je crée une application avec NodeJS et je souhaite utiliser React pour certains des composants interactifs de l'application. Je ne veux pas en faire une application sur une seule page.
Je n'ai encore rien trouvé sur le Web qui réponde aux questions suivantes:
Comment diviser ou regrouper mes composants React dans une application multi-pages?
Actuellement, tous mes composants sont dans un seul fichier, même si je ne les charge jamais dans certaines sections de l'application.
Jusqu'à présent, j'essaie d'utiliser des instructions conditionnelles pour rendre les composants en recherchant l'ID du conteneur où React sera rendu. Je ne suis pas sûr à 100% des meilleures pratiques avec React. Cela ressemble à quelque chose comme ça.
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')
);
}
Je lis toujours la documentation et je n'ai pas encore trouvé ce dont j'ai besoin pour une application multi-pages.
Merci d'avance.
la source
render
la dans le bon composant dans unscript
bloc.Réponses:
Actuellement, je fais quelque chose de similaire.
L'application n'est pas une application React complète, j'utilise React pour des éléments dynamiques, comme CommentBox, qui est autark. Et peut être inclus à tout moment avec des paramètres spéciaux.
Cependant, toutes mes sous-applications sont chargées et incluses dans un seul fichier
all.js
, de sorte qu'elles peuvent être mises en cache par le navigateur sur les pages.Quand j'ai besoin d'inclure une application dans les modèles SSR, je dois juste inclure un DIV avec la classe "__react-root" et un ID spécial, (le nom de l'application React à rendre)
La logique est vraiment simple:
Éditer
Étant donné que Webpack prend parfaitement en charge le fractionnement de code et le LazyLoading, j'ai pensé qu'il était logique d'inclure un exemple dans lequel vous n'avez pas besoin de charger toutes vos applications dans un seul paquet, mais de les diviser et de les charger à la demande.
la source
create react app
vous propose des outils simples à créerbundle.js
. Donc, le but de ma réponse est d'utiliser la même chosebundle.js
et de l'utiliser sur plusieurs sites SSR, et de charger de nombreuses applications React différentes sur une seule page. Désolé, si ma réponse ne correspond pas à vos besoins, n'hésitez pas à créer un nouveau message et à décrire ce que vous essayez de faire, j'essaierais de vous aider.Vous pouvez fournir plusieurs points d'entrée pour l'application dans le fichier webpack.config.js:
alors vous pouvez avoir dans votre dossier src trois fichiers html différents avec leurs fichiers js respectifs (exemple pour page1):
Fichier JavaScript:
Différents composants React peuvent ensuite être chargés pour chaque page.
la source
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.
Alors, cet exemple doit-il être mis à jour pour Webpack 4+?Je construis une application à partir de zéro et j'apprends au fur et à mesure, mais je pense que ce que vous recherchez, c'est React-Router . React-Router mappe vos composants à des URL spécifiques. Par exemple:
Dans le cas de la recherche, 'term' est accessible en tant que propriété dans AnimalSearchBox:
Essaye le. Ce tutoriel est celui qui m'a mis au dessus en termes de ma compréhension de ceci et d'autres sujets connexes.
La réponse originale suit:
J'ai trouvé mon chemin ici à la recherche de la même réponse. Voyez si cet article vous inspire. Si votre application ressemble à la mienne, elle aura des zones qui changent très peu et ne varient que dans le corps principal. Vous pouvez créer un widget dont la responsabilité est de restituer un widget différent en fonction de l'état de l'application. En utilisant une architecture de flux, vous pouvez envoyer une action de navigation qui change l'état sur lequel votre widget de corps bascule, mettant à jour efficacement le corps de la page uniquement.
C'est l'approche que j'essaye maintenant.
la source
Router
travail de la même façon qu'il le fait dans une seule application page?Utilisez-vous un CMS? Ils ont tendance à aimer changer les URL qui pourraient casser votre application.
Une autre façon consiste à utiliser quelque chose comme React Habitat .
Avec lui, vous pouvez enregistrer des composants et ils sont automatiquement exposés au dom.
Exemple
Enregistrer le (s) composant (s):
Ensuite, ils sont disponibles dans votre dom comme ceci:
Ce qui précède sera automatiquement remplacé par vos composants de réaction.
Vous pouvez ensuite transmettre automatiquement des propriétés (ou accessoires) à vos composants:
Cela exposera
size
comme accessoire à votre composant. Il existe des options supplémentaires pour passer d'autres types tels que json, array, ints, floats, etc.la source
Je sais que cela fait un moment que cette question a été posée, mais j'espère que cela aide quelqu'un.
Comme @Cocomico l'a mentionné, vous pouvez fournir plusieurs points d'entrée pour l'application dans le fichier webpack.config.js. Si vous recherchez une configuration Webpack simple (basée sur l'idée de plusieurs points d'entrée) qui vous permet d'ajouter des composants React à des pages statiques, vous pouvez envisager d'utiliser ceci: https://github.com/przemek-nowicki/multi-page -app-avec-réagir
la source
Je vous suggère de jeter un œil à InertiaJS: https://inertiajs.com/
la source