您的位置:

React History

一、什么是React History

React History 是 React 官方提供的一款路由管理工具,主要用于帮助 React 应用实现路由跳转和管理。

相较于 React 自带的路由功能,React History 更为简介,易于上手。它提供了丰富的路由管理 API,可以让我们在项目中更加灵活地使用路由。

二、React History的使用

在 React 项目中使用 React History 非常简单,只需按照以下步骤即可:

1.安装 React History


    // 使用 npm
    npm install --save history

    // 使用 yarn
    yarn add history

2.创建 Router

创建 Router 是使用 React History 的第一步,我们可以使用 BrowserRouter、HashRouter、MemoryRouter 或 StaticRouter。

下面是一个基于 BrowserRouter 的实例:


    import React from 'react';
    import { BrowserRouter as Router, Route } from 'react-router-dom';
    import Home from './Home';
    import About from './About';

    function App() {
      return (
        
   
          
    
          
    
        
   
      );
    }

    export default App;

上述代码通过创建 BrowserRouter,为项目添加了两个路由:"/"和"/about"。当用户访问这两个路由时,对应的组件将会被渲染。

3.Link组件

Link 组件是 React History 提供的一个组件,用于在应用中实现路由跳转。它类似于 a 标签,在点击时可以跳转到指定的路由。

下面是一个基于 Link 组件的实例:


    import React from 'react';
    import { Link } from 'react-router-dom';

    function Navigation() {
      return (
        
   
      );
    }

    export default Navigation;

上述代码通过创建 Link 组件,为项目添加了两个路由链接:"/"和"/about"。

4.编程式导航

使用编程式导航,可以在代码中直接跳转到指定的路由。


    import React from 'react';
    import { useHistory } from 'react-router-dom';
    
    function Home() {
      const history = useHistory();

      function handleClick() {
        history.push('/about');
      }

      return (
        
   

Home

); } export default Home;

上述代码中,我们使用 useHistory hook 获取 history 对象,然后在点击按钮时调用 history.push 方法,跳转到指定路由。

三、React History API

React History 提供了丰富的路由管理 API,下面我们来介绍一些常用的 API。

1.history.push

history.push 方法可以实现路由跳转,它会将新的路由添加到历史堆栈中。

下面是一个使用 history.push 的示例:


    import React from 'react';
    import { useHistory } from 'react-router-dom';
    
    function Home() {
      const history = useHistory();

      function handleClick() {
        history.push('/about');
      }

      return (
        
   

Home

); } export default Home;

2.history.replace

history.replace 方法也可以实现路由跳转,但是它会替换当前路由,而不是将新的路由添加到历史堆栈中。

下面是一个使用 history.replace 的示例:


    import React from 'react';
    import { useHistory } from 'react-router-dom';
    
    function Home() {
      const history = useHistory();

      function handleClick() {
        history.replace('/about');
      }

      return (
        
   

Home

); } export default Home;

3.history.goBack

history.goBack 方法可以将用户返回到历史堆栈中的上一个路由。

下面是一个使用 history.goBack 的示例:


    import React from 'react';
    import { useHistory } from 'react-router-dom';
    
    function About() {
      const history = useHistory();

      function handleClick() {
        history.goBack();
      }

      return (
        
   

About

); } export default About;

4.history.goForward

history.goForward 方法可以将用户前进到历史堆栈中的下一个路由。

下面是一个使用 history.goForward 的示例:


    import React from 'react';
    import { useHistory } from 'react-router-dom';
    
    function Home() {
      const history = useHistory();

      function handleClick() {
        history.goForward();
      }

      return (
        
   

Home

); } export default Home;

5.history.listen

history.listen 方法可以监听路由的变化,并执行回调函数。

下面是一个使用 history.listen 的示例:


    import React, { useState, useEffect } from 'react';
    import { useHistory } from 'react-router-dom';
    
    function App() {
      const history = useHistory();
      const [location, setLocation] = useState(history.location);

      useEffect(() => {
        const unlisten = history.listen(location => {
          setLocation(location);
        });
        return unlisten;
      }, [history]);

      return (
        
   

Current location: {location.pathname}

); } export default App;

上述代码中,我们使用 useEffect hook 监听 history 变化,并在每次变化时更新组件的状态。

四、总结

React History 是 React 官方提供的一款路由管理工具,它简单易用,提供了丰富的路由管理 API,可以让我们更加灵活地使用路由。在使用 React History 时,我们可以通过创建 Router、Link 组件和编程式导航来实现路由跳转,并使用 history API 来管理路由。

在我们的应用中要使用React History,我们需要有路由跳转的需求,同时使用Code Splitting(代码拆分) 。通常情况下,我们还需要使用 withRouter 或 useHistory 将 router 对象传递给我们的组件。