美文网首页
浅尝react-router

浅尝react-router

作者: 奔跑的大橙子 | 来源:发表于2023-09-26 12:39 被阅读0次

一、什么是react-router

react-router包含3个库,react-router、react-router-dom和react-router-native。

react-router提供最基本的路由功能,实际使用的时候我们不会直接安装react-router,⽽是根据应用运行的环境选择安装 react-router-dom(在浏览器中使用)或react-router-native(在rn中使用)。react-router-dom和 react-router-native都依赖react-router,所以在安装时,react-router也会⾃动安装,创建web应⽤。

二、如何安装

npm install --save react-router-dom

三、如何使用

react-router中奉⾏⼀切皆组件的思想,路由器-Router、链接-Link、路由-Route、独占-Switch、重定向-Redirect都以组件形式存在。

RouterPage.js文件内容如下:

import React, { Component } from "react";

import { BrowserRouter as Router, Route, Link } from "react-router-dom";

export default class RouterPage extends Component {

    render() {

        return (

            <div>

                <h3>RouterPage</h3>

                <Router>

                    <Link to="/">首页</Link>

                    <Link to="/user">用户中心</Link>

                    {/* 根路由要添加exact,实现精确匹配 */}

                    <Route exact path="/" component={HomePage} />

                    <Route path="/user" component={UserPage} />

                </Router>

            </div>

        )

    }

}

class HomePage extends Component {

    render() {

        return (

            <div>

                <h3>HomePage</h3>

            </div>

        )

    }

}

class UserPage extends Component {

    render() {

        return (

            <div>

                <h3>UserPage</h3>

            </div>

        )

    }

}

Route渲染内容的三种方式

Route渲染优先级:children>component>render。

这三种⽅式互斥,你只能用⼀种。

children:func

有时候,不管location是否匹配,你都需要渲染一些内容,这时候你可以用children。 除了不管location是否匹配都会被渲染之外,其它⼯作⽅法与render完全⼀样。

component:component

只在当location匹配的时候渲染。

render:func

但是当你用render的时候,你调用的只是个函数。 只在当location匹配的时候渲染。

import React, { Component } from "react";

import { BrowserRouter as Router, Route, Link } from "react-router-dom";

export default class RouterPage extends Component {

    render() {

        return (

            <div>

                <h3>RouterPage</h3>

                <Router>

                    <Link to="/">首页</Link>

                    <Link to="/user">用户中心</Link>

                    <Route

                        exact

                        path="/"

                        component={HomePage}

                        // children={() => <div>children</div>}

                        render={() => <div>render</div>}

                    />

                    <Route path="/user" component={UserPage} />

                </Router>

            </div>

        )

    }

}

class HomePage extends Component {

    render() {

        return (

            <div>

                <h3>HomePage</h3>

            </div>

        )

    }

}

class UserPage extends Component {

    render() {

        return (

            <div>

                <h3>UserPage</h3>

            </div>

        )

    }

}

显示404页面

设定⼀个没有path的路由在路由列表最后面,表示⼀定匹配

import React, { Component } from "react";

import { BrowserRouter as Router, Route, Link, Switch } from "react-router-dom";

export default class RouterPage extends Component {

    render() {

        return (

            <div>

                <h3>RouterPage</h3>

                <Router>

                    <Link to="/">首页</Link>

                    <Link to="/user">用户中心</Link>

                    {/* 添加Switch表示仅匹配一个*/}

                    <Switch>

                        <Route

                            exact

                            path="/"

                            component={HomePage}

                        />

                        <Route path="/user" component={UserPage} />

                        <Route component={EmptyPage} />

                    </Switch>

                </Router>

            </div>

        )

    }

}

class HomePage extends Component {

    render() {

        return (

            <div>

                <h3>HomePage</h3>

            </div>

        )

    }

}

class UserPage extends Component {

    render() {

        return (

            <div>

                <h3>UserPage</h3>

            </div>

        )

    }

}

class EmptyPage extends Component {

    render() {

        return (

            <div>

                <h3>EmptyPage-404</h3>

            </div>

        )

    }

}

相关文章

网友评论

      本文标题:浅尝react-router

      本文链接:https://www.haomeiwen.com/subject/onzqbdtx.html