React-router学习笔记

react-router的理解

1.react的一个插件库
2.专门用来实现SPA应用

react-router相关API

内置组件

BrowserRouter

使用 HTML5 历史 API 记录( pushState,replaceState 和 popstate 事件)的 使的UI与URL保持同步。

Route

Route 组件也许是 React Router 中最重要的组件,它可以让你理解并学习如何使用它。它最基本的职责是在 location 与 Route 的 path 匹配时呈现一些 UI。

Link

在应用程序周围提供声明式的,可访问的导航。

NavLink

1.NavLink可以实现路由链接的高亮,通过activeClassName指定样式名
2.标签体内容是一个特殊的标签属性
3通过this.props.children可以获取标签体内容

Switch

Switch的使用
1.通常情况下,path和component是一一对应的关系,
2Switch可以提高路由匹配效率(单一匹配)

 <Switch>              
	 <Route path={'/about'} component={About}></Route>
	 <Route path={'/hello'} component={Hello}></Route>
 </Switch>

redirect

一般写在所有路由注册的最下方,当所有路由都无法匹配时,跳转到Redirect指定的路由

其他

history对象
match对象
withRouter函数

路由的基本使用

index.js

import React from 'react';//创建组件、虚拟DOM元素,生命周期
import ReactDOM from 'react-dom';//把创建好的 组件和虚拟DOM放在页面上展示的。
import App from "./App";
import {BrowserRouter} from 'react-router-dom'

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

app.js

import React from 'react';//创建组件、虚拟DOM元素,生命周期
import {Link,Route} from 'react-router-dom'
import {About} from "./components/about";
import {Hello} from "./components/hello";
export default class App extends React.Component{
    render() {
        return (
            <div>
                <div>
                    <Link to={'/about'}>去关于页面</Link>
                    <Link to={'/hello'}>去你好页面</Link>
                </div>
                <div>
                    <Route path={'/about'} component={About}>

                    </Route>
                    <Route path={'/hello'} component={Hello}>

                    </Route>
                </div>
            </div>
        )
    }
}

注意
1.明确好界面中的导航区、展示区
2.导航区a标签为Link标签
3.展示区写Route标签进行路径匹配
4App的最外包裹一个<BrowserRouter><BrowserRouter/>

嵌套路由

hello/index页面

// @flow
import * as React from 'react';
import {Link,Route,Redirect} from 'react-router-dom'
import {Messges} from "./childrenComponents/messges";
import {News} from "./childrenComponents/news";

export class Hello extends React.Component{
    render() {
        return (
            <div>
                Hello页面
                <div>
                    <Link to={'/hello/messge'}>消息页面</Link>
                </div>
                <div>
                    <Link to={'/hello/news'}>新闻页面</Link>
                </div>
                <div>
                    <Route path={'/hello/messge'} component={News}></Route>
                    <Route path={'/hello/news'} component={Messges}></Route>
                    <Redirect to={'/hello/messge'}></Redirect>
                </div>
            </div>
        );
    };
};

向路由组件传递参数

1.params参数

路由链接(携带参数): <Link to={'/hello/messge/tom/18'}>详情</Link>
注册路由(声明接收): <Route path={'/hello/messge/:name/:age'} component={Hello}></Route>
接收参数:this.props.match.params

2.search参数
路由链接(携带参数)<Link to={'/hello/messge?name=tom&age=18'}>详情</Link>
注册路由(无需声明,正常注册即可)<Route path={'/hello/messge'} component={Hello}></Route>
接收参数:this.props.location.search
备注:获取的search是urlencoded编码字符串,需要借助querystring解析
3.state参数
路由链接(携带参数)<Link to={{pathname:'/hello/messge',state:{name:tom,age:18}}}>详情</Link>
注册路由(无需声明,正常注册即可)<Route path={'/hello/messge'} component={Hello}></Route>
接收参数:this.props.location.state
备注:刷新也保留

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值