zoukankan      html  css  js  c++  java
  • React学习(3)——Router路由的使用和页面跳转

    React-Router的中文文档可以参照如下链接:

            http://react-guide.github.io/react-router-cn/docs/Introduction.html

        文档中介绍的很详细,下面将通过个人视角介绍Router的用法,并通过实例来呈现,可以给各位作为参考,记录个人心得。

    一个网站,光有首页是不够的,需要添加页面跳转功能,才能让访问者逐层地看到网站丰富的内容。传统的前端页面使用超链接的方式进行跳转,比如:HTML标签中的  <a href=' '>点击</a> ,浏览器获取到链接地址后,会根据这个地址进行访问。

        然而,React框架采用的Router却不是传统的链接跳转。因为,严格来说,React项目中的内容都是呈现在一张HTML中的,正如之前文章中介绍过的 index.html,

        那么,在一张页面中,我们该如何去实现页面跳转呢。Router就提供了页面跳转渲染的方法,React应用会根据链接地址去决定要渲染的内容。也就是说,链接地址不再是用于直接跳转,而是告诉React,我需要怎么样的内容,让React进行渲染。

        通俗来讲,就像去采购东西,我给你一张清单,你按照清单上的内容去获取相应的物件。

        下面就直接通过实例来介绍React中Router的用法。

        首先,我们打开已经构建完成的React项目目录,本人采用的是VScode编辑器

        我们删去src目录下的所有文件,创建index.js文件,内容如下

    import React from 'react';
    import ReactDOM from 'react-dom';
    import App from './App';
    
    ReactDOM.render(<App/>, document.getElementById('root'));
    

          然后创建App.js文件,内容如下:

    import React from 'react';
    import { BrowserRouter as Router,Route} from 'react-router-dom';
    import Home from './Home';
    import Page1 from './Page1';
    import Page2 from './Page2';
    import Page3 from './Page3';
    
    class App extends React.Component {
    render(){
    return(
    <Router >
                    <div>
    <Route path="/" component={Home} />
    <Route path="/Page1" component={Page1} />
    <Route path="/Page2" component={Page2} />
    <Route path="/Page3" component={Page3} />
    </div>
    </Router>
    )
    }
    }
    export default App;
    

      

    下面来分析一下,在上方的import中,载入了  BrowserRouter as Router   和  Route,其意思就是从react-router-dom

    包中导入Router和Route,BrowserRouter是Router中的一种。

        然后,下面依次引入了Home、Page1、Page2、Page3这四个组件,组件的内容之后会给出。

        在组件的render函数的return里面,我们可以看到一对<Router>标签包含了四个<Route>标签,每个<Route>标签中都包含了path属性和component属性,path 属性用于储存路径,就是网站主页路径后面的内容,假如网站地址是localhost:3000,那么,locahost:3000后面的字符串就是path属性的内容。(注意,Router只能有一个子组件,所以要把所有Route标签用一个div包裹起来)

        然后是 component 属性,其中储存了组件名称,当我们访问特定地址时就会渲染该组件,也可以称其为这一个路由的入口组件,可以由这个组件延伸开来搭建页面。

        Home组件的内容如下(Home.js):

    import React from 'react';
    
    class Home extends React.Component{
    render(){
    return(
    <div>
    <div>This is Home!</div>
    </div>
    );
    }
    }
    
    export default Home;
    

      

    用于显示div标签中的This is Home!语句。

        Page1-Page3组件类似,内容为:

        

    import React from 'react';
    
    class Page1 extends React.Component{
    render(){
    return(
    <div>
    <div>This is Page1!</div>
    </div>
    );
    }
    }
    
    export default Page1;
    

      

     然后我们就可以来尝试一下访问这些页面,比如,我们在浏览器地址栏中输入localhost:3000/   

        可以看到:

     当我们访问 localhost:3000/Page1 的时候就会看到

    这里会产生一个疑问,为什么我们访问 /Page1 路径的时候会渲染Home组件的内容。

        这是因为Home组件所在路由的 path为 “/”,而“/Page1”开头包含了 “/”,React就会默认渲染Home组件。

        如果想在访问其他地址时不显示Home组件,可以在Home组件所在Route标签中加入 exact ,如下:

    <div>
    <Route exact path="/" component={Home} />
    <Route path="/Page1" component={Page1} />
    

      

    这样一来,当我们访问 localhost:3000/Page1 时就不会默认渲染Home组件。

        关于Page2、Page3的访问也是一样,现在为止,我们可以通过输入地址的方式进行访问,但依然不够方便,那么我们就要设置一些访问入口,也就是传统页面中“超链接”所在地。

        我们在Home组件中做如下更改:

    import React from 'react';
    import { Link } from 'react-router-dom';
    
    class Home extends React.Component{
    render(){
    return(
    <div>
    <div>This is Home!</div>
    <div>
    <Link to="/Page1/" style={{color:'black'}}>
    <div>点击跳转到Page1</div>
    </Link>
    <Link to="/Page2/" style={{color:'black'}}>
    <div>点击跳转到Page2</div>
    </Link>
    <Link to="/Page3/" style={{color:'black'}}>
    <div>点击跳转到Page3</div>
    </Link>
    </div>
    </div>
    );
    }
    }
    
    export default Home;
    

      

    首先,我们要在上方用 import 引入一个 Link组件,这个组件由react-router-dom内部定义,用于链接跳转,在render函数的return中设置3对Link标签,to后面填写Page1的地址(“/Page1/”、“/Page1”皆可),并包含跳转链接的文字。

        (style是设置字体颜色样式,可加可不加,关于样式的设置以后的文章中会讲到)

            现在,我们访问 localhost:3000/ 可以看到:

       点击其中一个链接就可以跳转到特定的页面,比如Page1:

    注意,这里的跳转并没有访问新的html文件,而是由React改变了原本html页面中的内容。

        现在,我们已经成功地使用 Router、Route 和 Link 实现了React页面跳转的功能,之后还会更新React相关文章,感谢各位支持。

  • 相关阅读:
    C++默认参数
    C语言中volatile关键字的作用
    CURL超时处理
    C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
    unix时间戳和localtime
    !!的用处
    linux中grep和egrep的用法
    非阻塞,send后马上close消息能成功发出去吗
    .hpp与.h的区别
    14课作业答疑
  • 原文地址:https://www.cnblogs.com/yangsg/p/10255547.html
Copyright © 2011-2022 走看看