zoukankan      html  css  js  c++  java
  • React---路由的使用(一)

    一、SPA的理解

    1. 单页Web应用(single page web application,SPA)。
    2. 整个应用只有一个完整的页面
    3. 点击页面中的链接不会刷新页面,只会做页面的局部更新。
    4. 数据都需要通过ajax请求获取, 并在前端异步展现。

    二、路由的理解

    1. 什么是路由?
      1. 一个路由就是一个映射关系(key:value)
      2. key为路径, value可能是function或component
    2. 路由分类
      1. 后端路由:

            1) 理解: value是function, 用来处理客户端提交的请求。

            2) 注册路由: router.get(path, function(req, res))

            3) 工作过程:当node接收到一个请求时, 根据请求路径找到匹配的路由, 调用路由中的函数来处理请求, 返回响应数据

          2. 前端路由:

            1) 浏览器端路由,value是component,用于展示页面内容。

            2) 注册路由: <Route path="/test" component={Test}>

            3) 工作过程:当浏览器的path变为/test时, 当前路由组件就会变为Test组件

    二、react-router-dom的理解

    1. react的一个插件库。
    2. 专门用来实现一个SPA应用。
    3. 基于react的项目基本都会用到此库。
    4. 安装路由:npm install --save react-router-dom

    三、react-router-dom相关API

    1. 内置组件

    1. <BrowserRouter>
    2. <HashRouter>
    3. <Route>
    4. <Redirect>
    5. <Link>
    6. <NavLink>
    7. <Switch>
    8. history对象
    9. match对象
    10. withRouter函数

    2. 其它

    1. history对象
    2. match对象
    3. withRouter函数

    3.路由的基本使用

                1.明确好界面中的导航区、展示区
                2.导航区的a标签改为Link标签
                            <Link to="/xxxxx">Demo</Link>
                3.展示区写Route标签进行路径的匹配
                            <Route path='/xxxx' component={Demo}/>
                4.<App>的最外侧包裹了一个<BrowserRouter>或<HashRouter>

    四、路由组件与一般组件

                1.写法不同:
                            一般组件:<Demo/>
                            路由组件:<Route path="/demo" component={Demo}/>
                2.存放位置不同:
                            一般组件:components
                            路由组件:pages
                3.接收到的props不同:
                            一般组件:写组件标签时传递了什么,就能收到什么
                            路由组件:接收到三个固定的属性
                                                history:
                                                            go: ƒ go(n)
                                                            goBack: ƒ goBack()
                                                            goForward: ƒ goForward()
                                                            push: ƒ push(path, state)
                                                            replace: ƒ replace(path, state)
                                                location:
                                                            pathname: "/about"
                                                            search: ""
                                                            state: undefined
                                                match:
                                                            params: {}
                                                            path: "/about"
                                                            url: "/about"

    五、代码

    1.App.jsx

     1 import React, { Component } from 'react'
     2 import {Link,Route} from 'react-router-dom'
     3 import Home from './components/Home'
     4 import About from './components/About'
     5 
     6 export default class App extends Component {
     7     render() {
     8         return (
     9             <div>
    10                 <div className="row">
    11                     <div className="col-xs-offset-2 col-xs-8">
    12                         <div className="page-header"><h2>React Router Demo</h2></div>
    13                     </div>
    14                 </div>
    15                 <div className="row">
    16                     <div className="col-xs-2 col-xs-offset-2">
    17                         <div className="list-group">
    18 
    19                             {/* 原生html中,靠<a>跳转不同的页面 */}
    20                             {/* <a className="list-group-item" href="./about.html">About</a>
    21                             <a className="list-group-item active" href="./home.html">Home</a> */}
    22 
    23                             {/* 在React中靠路由链接实现切换组件--编写路由链接 */}
    24                             <Link className="list-group-item" to="/about">About</Link>
    25                             <Link className="list-group-item" to="/home">Home</Link>
    26                         </div>
    27                     </div>
    28                     <div className="col-xs-6">
    29                         <div className="panel">
    30                             <div className="panel-body">
    31                                 {/* 注册路由 */}
    32                                 <Route path="/about" component={About}/>
    33                                 <Route path="/home" component={Home}/>
    34                             </div>
    35                         </div>
    36                     </div>
    37                 </div>
    38             </div>
    39         )
    40     }
    41 }

    2.index.js

     1 //引入react核心库
     2 import React from 'react'
     3 //引入ReactDOM
     4 import ReactDOM from 'react-dom'
     5 //
     6 import {BrowserRouter} from 'react-router-dom'
     7 //引入App
     8 import App from './App'
     9 
    10 ReactDOM.render(
    11     <BrowserRouter>
    12         <App/>
    13     </BrowserRouter>,
    14     document.getElementById('root')
    15 )

    3.Home.jsx

    1 import React, { Component } from 'react'
    2 
    3 export default class Home extends Component {
    4     render() {
    5         return (
    6             <h3>我是Home的内容</h3>
    7         )
    8     }
    9 }

    4.About.jsx

    1 import React, { Component } from 'react'
    2 
    3 export default class About extends Component {
    4     render() {
    5         return (
    6             <h3>我是About的内容</h3>
    7         )
    8     }
    9 }
     
  • 相关阅读:
    ATL正则表达式库使用
    用InternetOpen()的下载者
    获取IWebBrowser2指针的方法
    IE自动登陆-Navigate篇
    用WinInet开发Internet客户端应用指南
    VC中的GetKeyState和GetAsyncKeyState的区别
    通过IWebBrowser2的Navigate2来打开网页,怎样判断网页是否全部加载完毕
    利用IWebBrowser2接口的Navigate2方法实现Http POST传输
    IE撤销机制CtrlZ功能会在由于Js动态改变页面元素失效
    Web安全渗透测试之信息搜集篇(下)
  • 原文地址:https://www.cnblogs.com/le220/p/14697925.html
Copyright © 2011-2022 走看看