J'ai utilisé la réaction paresseuse et le suspense sur les routes dynamiques, mais je ne peux pas rendre les composants chargés paresseusement.
J'ai déjà recherché l'utilisation de lazy sur les routes mais je n'ai vu personne l'utiliser sur des routes dynamiques (localhost: 8080 / dynamic / dynamic ).
le chargement de composants sur des routes dynamiques fonctionne pour moi, le chargement différé fonctionne également si j'ai une route statique, mais lorsque j'ai essayé de combiner les deux, le composant ne se charge pas.
voici un exemple de ce que j'ai fait,
import Loader from './path/toFile';
import Home from './path/toFile';
const LazyLoadedComponent = lazy(() => import('./path/toFile'));
const App = () => {
return(
<Router>
<Switch>
// Home has multiple views controlled by buttons
// A view contains selections with corresponding id
<Route exact path="/:viewType?" component={Home} />
// this component doesn't load when I select something which links me to this dynamic route.
<Suspense fallback={Loader}>
<Route path="/viewType/:selectionId" component={LazyLoadedComponent} />
</Suspense>
</Switch>
</Router>
)
}
Je veux juste que mon composant soit chargé une fois que je vais sur cette route. Mais le résultat est qu'il charge Home, mais lorsque j'en sélectionne un dans la sélection, il affiche juste l'index.html avec un blanc, je n'ai vu aucune erreur produite.
J'ai trouvé la solution .. ou en quelque sorte dans mon cas.
J'ai inclus le publicPath de pour mes bundles.
J'ai ajouté ceci sur mon webpack.config.js
output: {
publicPath: '/',
},
et le problème pour lequel cela n'a pas fonctionné la dernière fois est que je rafraîchis simplement la page en sachant que le hotmodule est installé mais qu'il ne met pas à jour mes configurations.
Donc, après avoir redémarré le serveur, j'ai vu la ligne
la sortie webpack est servie depuis (le publicPath que j'ai déclaré)
Bien que j'aie passé plus de temps que je n'aurais dû dans ce problème. Cela fonctionne maintenant merci pour tous les commentaires.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots