Maison >interface Web >Questions et réponses frontales >Il existe plusieurs modes de routage React

Il existe plusieurs modes de routage React

WBOY
WBOYoriginal
2022-04-19 10:03:205202parcourir

Le routage React a deux modes, à savoir : 1. Le mode Hash, qui ajoute un signe "#" avant le chemin pour devenir une valeur de hachage ; 2. Le mode Historique, qui permet d'exploiter les onglets précédents du navigateur ou l'historique de la session accessible dans. le cadre.

Il existe plusieurs modes de routage React

L'environnement d'exploitation de ce tutoriel : système Windows 10, React version 17.0.1, ordinateur Dell G3.

Routage React

1. Qu'est-ce que

Dans une application monopage, un projet Web n'a qu'une seule page html Une fois la page chargée, il n'est pas nécessaire de recharger ou de sauter la page à cause de. opérations utilisateur. Transfert, ses caractéristiques sont les suivantes :

Changer l'URL sans laisser le navigateur envoyer une requête au serveur

Changer dynamiquement l'adresse URL dans la barre d'adresse du navigateur sans actualiser la page

Il est principalement divisé en deux modes :

  • mode hash : ajoutez # après l'url, tel que http://127.0.0.1:5500/home/#/page1

  • mode historique : permet le fonctionnement des sessions du navigateur auxquelles vous avez accédé dans des onglets ou des cadres Historique

2. Utiliser

Les composants correspondant au mode hachage et au mode historique de React Router sont :

HashRouter

BrowserRouter

L'utilisation de ces deux composants est très simple , comme le plus Le composant de niveau supérieur enveloppe d'autres composants, comme indiqué ci-dessous

// 1.import { BrowserRouter as Router } from "react-router-dom";
// 2.import { HashRouter as Router } from "react-router-dom";
 
import React from 'react';
import {
  BrowserRouter as Router,
  // HashRouter as Router  
  Switch,
  Route,
} from "react-router-dom";
import Home from './pages/Home';
import Login from './pages/Login';
import Backend from './pages/Backend';
import Admin from './pages/Admin';
 
 
function App() {
  return (
    <Router>
        <Route path="/login" component={Login}/>
        <Route path="/backend" component={Backend}/>
        <Route path="/admin" component={Admin}/>
        <Route path="/" component={Home}/>
    </Router>
  );
}
 
export default App;

3. Principe de mise en œuvre

Le routage décrit la relation de mappage entre l'URL et l'interface utilisateur. Ce mappage est unidirectionnel, c'est-à-dire l'URL. les modifications entraînent des mises à jour de l'interface utilisateur (pas besoin d'actualiser la page)

Ce qui suit utilise le mode de hachage comme exemple. La modification de la valeur de hachage n'entraînera pas l'envoi d'une requête au serveur. Si le navigateur n'envoie pas de requête, il le fera. ne rafraîchira pas la page.

Les modifications de la valeur de hachage déclenchent l'événement de hachage global de l'objet fenêtre. Par conséquent, le routage en mode hachage utilise l'événement hashchange pour surveiller les modifications dans l'URL, effectuant ainsi des opérations DOM pour simuler des sauts de page

react-router implémente également des sauts d'itinéraire basés sur cette fonctionnalité

Ce qui suit est développé sur l'analyse du composant HashRouter :

HashRouter

HashRouter enveloppe l'intégralité de l'application,

surveille les modifications des valeurs de hachage via window.addEventListener('hashChange', callback) et la transmet à ses composants imbriqués

transmet ensuite les données de localisation à composants descendants via le contexte, comme suit :

import React, { Component } from &#39;react&#39;;
import { Provider } from &#39;./context&#39;
// 该组件下Api提供给子组件使用
class HashRouter extends Component {
  constructor() {
    super()
    this.state = {
      location: {
        pathname: window.location.hash.slice(1) || &#39;/&#39;
      }
    }
  }
  // url路径变化 改变location
  componentDidMount() {
    window.location.hash = window.location.hash || &#39;/&#39;
    window.addEventListener(&#39;hashchange&#39;, () => {
      this.setState({
        location: {
          ...this.state.location,
          pathname: window.location.hash.slice(1) || &#39;/&#39;
        }
      }, () => console.log(this.state.location))
    })
  }
  render() {
    let value = {
      location: this.state.location
    }
    return (
      <Provider value={value}>
        {
          this.props.children
        }
      </Provider>
    );
  }
}
 
export default HashRouter;

Router

La principale chose que fait le composant Router est de faire correspondre la valeur actuelle transmise par BrowserRouter, le chemin transmis via les accessoires et le nom de chemin transmis dans le contexte, puis décidez si vous souhaitez exécuter le composant de rendu

import React, { Component } from &#39;react&#39;;
import { Consumer } from &#39;./context&#39;
const { pathToRegexp } = require("path-to-regexp");
class Route extends Component {
  render() {
    return (
      <Consumer>
        {
          state => {
            console.log(state)
            let {path, component: Component} = this.props
            let pathname = state.location.pathname
            let reg = pathToRegexp(path, [], {end: false})
            // 判断当前path是否包含pathname
            if(pathname.match(reg)) {
              return <Component></Component>
            }
            return null
          }
        }
      </Consumer>
    );
  }
}
export default Route;

Apprentissage recommandé : "Tutoriel vidéo React"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn