Client de Routage (à l'aide de réagir-routeur) et Côté Serveur de Routage
J'ai réfléchi et je me suis confondu avec le routage entre le Client et le Serveur. Supposons que j'utilise ReactJS pour le rendu côté serveur avant l'envoi de la demande de retour auprès de navigateur web, et l'utilisation de réagir-routeur en tant que client de routage côté de basculer entre les pages sans rafraîchissant que d'un SPA.
Ce qui vient à l'esprit est:
- Comment sont les routes de l'interpréter? Par exemple, une demande de page d'Accueil (
/home
) à des Postes page (/posts
) - D'où vient le routage aller, sur le serveur ou côté client?
- Comment sait-elle comment elle est traitée?
- Je vous suggère de lire sur l'Histoire de l'API dans les navigateurs.
Vous devez vous connecter pour publier un commentaire.
Remarque, cette réponse couvre Réagir Routeur version de 0,13.x - la prochaine version 1.0 sera significativement différents détails de mise en œuvre
Serveur
C'est un minimum
server.js
avec réagissent-routeur:Où la
routes
module d'exporter une liste d'Itinéraires:Chaque fois qu'une demande est faite au serveur, vous créez un usage unique
Router
instance configuré avec l'URL entrante que son emplacement statique, qui est résolu à l'encontre de l'arbre de routes à mis en place des itinéraires correspondant, de retour d'appel avec le haut-niveau gestionnaire d'itinéraire à être rendue et un enregistrement des enfants routes appariés à chaque niveau. C'est ce qui est consulté lorsque vous utilisez le<RouteHandler>
composant au sein d'un itinéraire composant de traitement pour rendre un enfant dont l'itinéraire a été trouvée.Si l'utilisateur a JavaScript désactivé, soit il est lent à charger, des liens qu'ils cliquez sur va frapper de nouveau le serveur, qui est résolu à nouveau comme ci-dessus.
Client
C'est un minimum
client.js
avec réagissent-routeur (ré-utiliser les mêmes voies module):Lorsque vous appelez
Router.run()
, il crée un Routeur exemple pour vous dans les coulisses, qui est utilisé chaque fois que vous naviguez autour de l'application, l'URL peut être dynamique sur le client, plutôt que sur le serveur où une seule demande a une correction de l'URL.Dans ce cas, nous utilisons la
HistoryLocation
, qui utilise leHistoire
API pour s'assurer de la bonne chose qui se passe lorsque vous appuyez sur l'arrière/vers l'avant le bouton. Il y a aussi unHashLocation
qui modifie l'URLhash
pour faire les entrées de l'historique et à l'écoute de lawindow.onhashchange
de l'événement pour lancer la navigation.Lorsque vous utilisez réagir-routeur
<Link>
composant, vous lui donnez unto
prop qui est le nom d'une route, en plus de touteparams
etquery
données de l'itinéraire besoins. Le<a>
rendus par ce composant a unonClick
gestionnaire qui a finalement appelsrouter.transitionTo()
sur le routeur de l'instance avec les accessoires que vous avez donné le lien, qui ressemble à ceci:Pour un lien régulier en fin de compte, les appels
location.push()
quel que soit le type d'Emplacement que vous utilisez, qui gère les détails de la configuration de l'histoire de la navigation avec les boutons précédent et suivant de travail, puis appelle de nouveau àrouter.handleLocationChange()
de laisser le routeur sais qu'il peut procéder à la transition vers le nouveau chemin d'accès d'URL.Le routeur appelle ensuite sa propre
router.dispatch()
méthode avec la nouvelle adresse, qui gère les détails de la détermination de la configuration des itinéraires correspond à l'URL, puis appelle tout transition crochets présent pour les paires de routes. Vous pouvez mettre en œuvre ces de transition crochets sur l'un de votre itinéraire gestionnaires de prendre des mesures lorsqu'un itinéraire est sur le point d'être navigué loin d'ou navigué, avec la capacité d'interrompre la transition si les choses ne sont pas à votre goût.Si la transition n'était pas interrompue, la dernière étape consiste à appeler la fonction de rappel que vous avez donné à
Router.run()
avec le haut-gestionnaire de niveau composant et un objet d'état de tous les détails de l'URL et les itinéraires correspondant. Le haut-gestionnaire de niveau composant est en fait laRouter
instance elle-même, qui gère le rendu le plus haut gestionnaire d'itinéraire qui correspond.Le processus ci-dessus est de nouveau exécutée à chaque fois que vous accédez à une nouvelle URL sur le client.
Exemple des projets
var routes = require('./routes')
Est-il une liste de routes? J'ai utilisé Express routeur, mais cet exemple ici semble être le seul exemple de mise en place côté serveur de rendu avec Réagissent Routeur, donc ce serait bien si elle était un exemple de codereact-router
version. Veuillez le mettre à jour.var html = React.renderToString(<Handler/>) SyntaxError: Unexpected token <
lorsque vous tentez d'exécuter le serveur?react-router
pour certaines sous-routes? Par exemple, si quelqu'un voulait utiliser réagir à créer un tableau de bord, il serait possible de monter unreact-router
juste pour tous/dashboard
routes?Avec la 1.0, Réagissent-Routeur dépend de la l'histoire module comme un peerDependency. Ce module traite de routage dans le navigateur. Par défaut Réagir-Routeur utilise le HTML5 Histoire de l'API (
pushState
,replaceState
), mais vous pouvez le configurer pour utiliser routage basé sur le hachage (voir ci-dessous)La route de la manipulation se fait maintenant en coulisses, et ReactRouter envoie de nouveaux accessoires en bas de la Route des gestionnaires lors de les changements de route. Le Routeur a une nouvelle
onUpdate
prop de rappel à chaque fois qu'un des changements d'itinéraire, utile pour la page vue le suivi ou la mise à jour de la<title>
, par exemple.Client (HTML5 routage)
Client (routage basé sur le hachage)
Serveur
Sur le serveur, on peut utiliser
ReactRouter.match
, ceci est pris à partir de la un serveur de rendu guide