React学习14(路由的基本使用)

相关理解

1)对SPA的理解

        单页Web应用;

        整个应用只有一个完整的页面;

        点击页面中的链接不会刷新页面,只会做页面的局部刷新;

        数据都需要通过ajax请求获取,并在前端异步展示

2)路由的理解

A、什么是路由

        一个路由就是一个映射关系(key-value);

         key为路径,value可能是function或者是component

B、路由分类

后端路由

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

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

        工作过程:当Node接收到一个请求时,根据请求的路径找到匹配的路由,调用路由中的 函数

来请求路由,返回响应数据

前端路由

        浏览器端路由:value是component,用来展示页面内容

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

3)react-router的理解

注意:由于react-router有版本的更新,目前最新的版本是6,以下关于路由器的说明都是基于5的

版本,最新的版本后期会做继续的说明

react-router是react的一个插件库(所以在使用路由的时候需要安装:npm i react-router-

dom@5.2.0,因为是采用的分别暴露,所以在使用的过程中,用什么引入什么);

专门用来实现一个SPA应用;

基于react的项目基本都会用到此库

路由的基本使用

1.明确好页面的导航区,展示区

2.导航区的a标签改为Link标签

<Link to="/xxxx">Demo</Link>

3.展示区写Route标签进行路径的匹配

<Route path="/xxx" component={Demo} />

4.的最外侧包裹了一个<BrowserRouter>或者是<HashRouter>

代码示例

App.jsx

import React, { Component } from 'react'
import { Link, Route} from 'react-router-dom'
import Home from './components/Home'
import About from './components/About'

export default class App extends Component {
  render() {
    return (
      <div>
        <div className="row">
          <div className="col-xs-offset-2 col-xs-8">
            <div className="page-header"><h2>Vue Router Demo</h2></div>
          </div>
        </div>
        <div className="row">
          <div className="col-xs-2 col-xs-offset-2">
            <div className="list-group">
              {/* 在原生html中,靠a标签实现页面的跳转 */}
              {/* <a className="list-group-item active" href="./about.html">About</a>
              <a className="list-group-item" href="./home.html">Home</a> */}

              {/* 在React中靠路由链接切换组件 */}
                  <Link className="list-group-item" to="/about">About</Link>
                  <Link className="list-group-item" to="/home">Home</Link>
            </div>
          </div>
          <div className="col-xs-6">
            <div className="panel">
              <div className="panel-body">
              {/* 注册路由 */}
                  <Route path= "/about" component={About}/>
                  <Route path="/home" component={Home}/>
              </div>
            </div>
          </div>
        </div>
      </div>
    )
  }
}

About.jsx

import React, { Component } from 'react'

export default class About extends Component {
  render() {
    return (
      <h2>我是About的内容</h2>
    )
  }
}

Home.jsx

import React, { Component } from 'react'

export default class Home extends Component {
  render() {
    return (
      <h2>我是Home的内容</h2>
    )
  }
}

index.js

import React from 'react'

import ReactDOM from 'react-dom'

import { BrowserRouter } from 'react-router-dom'

import App from './App.jsx'



ReactDOM.render(
  <BrowserRouter>
     <App/>
  </BrowserRouter>,
  document.getElementById('root')
)

路由组件与一般组件的区别

1.写法不同:

        一般组件:<Demo/>

        路由组件:<Route path="/demo"  component={Demo} />

2.存放位置不同

        一般组件:components中

        路由组件:pages中

3.接收到的props不同

        一般组件:写组件标签时传递了什么,就能收到什么

        路由组件:接收到三个固定的属性

三个固定的属性分别为:

history:
 go: f go(n)
 goBack: f goBack(n)
 goForward: f goForward(n)
 push: f push(path, state)
 replace: f replace(path, state)

location:
 pathname:"/about"
 search:''
 state:undefined

match:
 params:{ }
 path:'/about'
 url:'/about'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值