欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

react-router-dom的使用說(shuō)明

 更新時(shí)間:2024年03月13日 10:07:36   作者:凸頭拯救地球  
這篇文章主要介紹了react-router-dom的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

React-Router-Dom

1. React-Router

react-router是一個(gè)核心庫(kù),我們?cè)谧鯬C端時(shí)要用react-router-dom,而在移動(dòng)端我們要用React-Router-Native

2.React-Router-Dom

這個(gè)庫(kù)是專門做PC端的路由

  • 2.1 在React-cli項(xiàng)目中安裝React-Router-Dom
npm i react-router-dom
  • 2.2 注意

React-Router-Dom最新版本是6,如果下載指定版本加@符

npm i react-router-dom@5

3.React-Router-Dom5

  • 3.1 React-Router-Dom的意義

前端路由存在的意義就是單頁(yè)面應(yīng)用,英文:Single Page Application,前端有自己的一套路由,頁(yè)面只有一個(gè)html完成,在不同的路徑下,加載不同的組件,從而完成單頁(yè)面應(yīng)用,在此也可以通過(guò)ajax請(qǐng)求的方式去后端獲得數(shù)據(jù)

  • 3.2 注意

React-Router-Dom6在2021年11月已成為默認(rèn)版本

4.React-Router-Dom5基本使用

  • 4.1 link和Route
import {Link, Route} from "react-router-dom"

<Link to="/about">About</Link>
<Link to='/home'>Home</Link>
<Switch>
     <Route path="/about" component={About}/>
     <Route path="/home" component={Home}/>
     <Redirect to="/about"/>
</Switch>            

link要和Route相互搭配,link書寫鏈接,由Route來(lái)注冊(cè)路由

  • 4.2 BrowserRouter

在react中我們要用BrowserRouter包裹一下路由,通常在index.js里

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {BrowserRouter} from "react-router-dom"

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <React.StrictMode>
        <BrowserRouter>
            <App/>
        </BrowserRouter>
    </React.StrictMode>
);

reportWebVitals();
  • 4.3 HashRouter

和BrowserRouter一樣,只不過(guò)HashRoute在url里是有hash值的

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {HashRouter} from "react-router-dom"

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    <React.StrictMode>
        <HashRouter>
            <App/>
        </HashRouter>
    </React.StrictMode>
);

reportWebVitals();
  • 4.4 Switch

在React中相同路徑下是可以加載多個(gè)組件的,假如你不想,你可以用Switch包裹一下Route,這樣即使相同路徑下,也只是加載最上面的組件

<Switch>
     <Route path="/home/news" component={News}/>
     <Route path="/home/massage" component={Message}/>
     <Route path="/home/massage" component={Detail}/>
     <Redirect to="/home/news"/>
</Switch>

上面相同路徑但只加載Message組件

  • 4.5 Redirect

在react中我們想在一開始默認(rèn)加載哪個(gè)組件或者路徑不適配的時(shí)候我們可以用Redirect標(biāo)簽,可以給我們重定向加載任何一個(gè)組件,但Redirect一般出現(xiàn)在Route的最下面

<Switch>
     <Route path="/home/news" component={News}/>
     <Route path="/home/massage" component={Message}/>
     <Redirect to="/home/news"/>
</Switch>

5.路由的嵌套

  • 5.1 NavLink組件

假設(shè)現(xiàn)在我們需要給予選中路由一個(gè)高亮我們可以使用NavLink標(biāo)簽,我們可以把他單獨(dú)封裝成一個(gè)公用的路由組件

import React, {Component, Fragment} from "react"
import {NavLink} from 'react-router-dom'
import "./MyNavLink.css"

export default class MyNavLink extends Component {
    render() {
        return (
            <Fragment>
                <div className="btn-div">
                    <NavLink activeClassName="active" className="btn-a" {...this.props}/>
                </div>
            </Fragment>
        )
    }
}

注意高亮默認(rèn)在React-Router中式action屬性

  • 5.2 路由的嵌套

如果我們想在react項(xiàng)目中,寫入多級(jí)路由的話,我們需要在Link,Route以及Redirect中加入父級(jí)路由

5.2.1 父級(jí)路由組件

import {Fragment} from "react"
import {Route, Switch, Redirect} from "react-router-dom"
import Title from "./component/Title";
import About from "./pages/About";
import Home from "./pages/Home";
import MyNavLink from "./MyNavLink";

import './App.css';

function App() {
    return (
        <Fragment>
            <Title/>
            <MyNavLink to="/about">About</MyNavLink>
            <MyNavLink to='/home'>Home</MyNavLink>
            <Switch>
                <Route path="/about" component={About}/>
                <Route path="/home" component={Home}/>
                <Redirect to="/about"/>
            </Switch>
        </Fragment>
    );
}

export default App;

5.2.2 子級(jí)路由組件

import React, {Component, Fragment} from "react"
import {Switch, Route, Redirect} from 'react-router-dom'
import MyNavLink from "../../MyNavLink";
import Message from "./Message";
import News from "./News";

export default class Home extends Component {
    render() {
        return (
            <Fragment>
                <h1>我是Home</h1><br/>
                <MyNavLink to="/home/news">News</MyNavLink>
                <MyNavLink to="/home/massage">Massage</MyNavLink>
                <Switch>
                    <Route path="/home/news" component={News}/>
                    <Route path="/home/massage" component={Message}/>
                    <Redirect to="/home/news"/>
                </Switch>
            </Fragment>
        )
    }
}
  • 5.3 路由的匹配

5.3.1路由的模糊匹配

<Fragment>
     <Title/>
     <MyNavLink to="/about">About</MyNavLink>
     <MyNavLink to='/home/a/b'>Home</MyNavLink>
     <Switch>
          <Route path="/about" component={About}/>
          <Route path="/home" component={Home}/>
          <Redirect to="/about"/>
     </Switch>
</Fragment>

像這樣的路由我們多傳,雖然路徑不匹配但在模糊匹配下可以讓react渲染Home組件,但是不可以頭路徑不正確

例如:

<Fragment>
     <Title/>
     <MyNavLink to="/about">About</MyNavLink>
     <MyNavLink to='/a/home'>Home</MyNavLink>
     <Switch>
          <Route path="/about" component={About}/>
          <Route path="/home" component={Home}/>
          <Redirect to="/about"/>
     </Switch>
</Fragment>

這樣前面的路徑不對(duì)是匹配不到的

5.3.2路由的嚴(yán)格匹配

假如現(xiàn)在我們不希望進(jìn)行模糊匹配,嚴(yán)格按照路徑的話我們就可以開啟嚴(yán)格匹配模式

<Fragment>
     <Title/>
     <MyNavLink to="/about">About</MyNavLink>
     <MyNavLink to='/a/home'>Home</MyNavLink>
     <Switch>
          <Route exact={true} path="/about" component={About}/>
          <Route exact path="/home" component={Home}/>
          <Redirect to="/about"/>
     </Switch>
</Fragment>

5.3.3 注意

我們不可以過(guò)多的使用嚴(yán)格模式就像ref一樣,否則會(huì)造成一些問(wèn)題,并且在多級(jí)路由的父路由不可以開啟嚴(yán)格模式

6. 路由的參數(shù)

  • 6.1 Params參數(shù)

6.1.1 傳遞Params參數(shù)

this.state.massageArr.map(item => {
                            return <li key={item.id}>
                                <Link to={`/home/massage/detail/${item.id}/${item.title}`}>
                                    {item.title}
                                </Link>
                            </li>
                        })

我們通過(guò)數(shù)組的映射以及母版字符串的方式傳遞了兩個(gè)Params參數(shù)

6.1.2 接收Params參數(shù)

<Route path="/home/massage/detail/:id/:title" component={Detail}/>

這樣接收react-router幫我們生成了對(duì)象

6.1.3調(diào)用Params參數(shù)

export default class Detail extends Component {
    render() {
        const {id, title} = this.props.match.params
        const findResult = data.find((_item) => {
            return _item.id === id
        })
        return (
            <Fragment>
                <ul>
                    <li>id:{id}</li>
                    <li>title:{title}</li>
                    <li>content:{findResult.content}</li>
                </ul>
            </Fragment>
        )
    }
}

我們可以通過(guò)props里面的match里面封裝的params里面將傳遞的值解構(gòu)出來(lái)使用

  • 6.2 Search參數(shù)

6.2.1 傳遞Search參數(shù)

this.state.massageArr.map(item => {
                            return <li key={item.id}>
                                <Link to={`/home/massage/detail?id=${item.id}&title=${item.title}`}>
                                    {item.title}
                                </Link>
                            </li>
                        })

同樣我們也傳遞了兩個(gè)Search參數(shù),但注意Search參數(shù)不需要接收

6.2.2 querystring庫(kù)

6.2.2.1 urlencoded編碼

key=value&key=value

像這樣的編碼格式被稱為urlencoded編碼格式

6.2.2.2 利用 querystring轉(zhuǎn)化格式

我們可以轉(zhuǎn)化

import qs from "querystring"

qs.stringify()  將對(duì)象轉(zhuǎn)化為urlencoded
qs.parse()      將urlencoded轉(zhuǎn)化為js中的對(duì)象

6.2.3 調(diào)用Search參數(shù)

import React, {Component, Fragment} from "react"
import qs from "querystring"

const data = [
    {id: "01", content: "你好,寧夏"},
    {id: "02", content: "你好,吉林"},
    {id: "03", content: "你好,陜西"},
]

export default class Detail extends Component {
    render() {
        const {search} = this.props.location
        const {id, title} = qs.parse(search.slice(1))
        const findResult = data.find((_item) => {
            return _item.id === id
        })
        return (
            <Fragment>
                <ul>
                    <li>id:{id}</li>
                    <li>title:{title}</li>
                    <li>content:{findResult.content}</li>
                </ul>
            </Fragment>
        )
    }
}

6.2.4 注意

如果沒(méi)有這個(gè)第三方庫(kù)我們可以安裝

npm i querystring
  • 6.3 state參數(shù)

6.3.1 傳遞state參數(shù)

this.state.massageArr.map(item => {
                            return <li key={item.id}>
                                <Link to={{pathname: "/home/massage/detail", state: {id: item.id, title: item.title}}}>
                                    {item.title}
                                </Link>
                            </li>
                        })

傳遞state對(duì)象,要把地址和state封裝成一個(gè)對(duì)象

6.3.2 調(diào)用state參數(shù)

import React, {Component, Fragment} from "react"

const data = [
    {id: "01", content: "你好,寧夏"},
    {id: "02", content: "你好,吉林"},
    {id: "03", content: "你好,陜西"},
]

export default class Detail extends Component {
    render() {
        const {id, title} = this.props.location.state
        const findResult = data.find((_item) => {
            return _item.id === id
        })
        return (
            <Fragment>
                <ul>
                    <li>id:{id}</li>
                    <li>title:{title}</li>
                    <li>content:{findResult.content}</li>
                </ul>
            </Fragment>
        )
    }
}

7.編程式路由導(dǎo)航

  • 7.1 編程式路由導(dǎo)航的分類

push是壓棧式的,瀏覽器可以回退,有保存記錄。而replace是覆蓋瀏覽器的棧頂不能回退

  • 7.2 replace編程式路由導(dǎo)航
replaceShow = (id, title) => {
        this.props.history.replace(`/home/massage/detail/${id}/${title}`)
    }

注意:只有在路由組件內(nèi)才可以拿到這兩個(gè)方法

  • 7.3 push編程式路由導(dǎo)航
pushShow = (id, title) => {
        this.props.history.push(`/home/massage/detail/${id}/${title}`)
    }

8. withRouter

如果我們想在非路由組件里調(diào)用路由組件的方法我們就可以用withRouter

import React, {Component, Fragment} from "react"
import {withRouter} from "react-router-dom"

class Title extends Component {

    back = () => {
        this.props.history.goBack()
    }

    forWord = () => {
        this.props.history.goForward()
    }

    render() {
        return (
            <Fragment>
                <h2 style={{marginLeft: "50px"}}>React Router Demo</h2>
                <button onClick={this.forWord}>前進(jìn)</button>
                <button onClick={this.back}>后退</button>
                <hr/>
            </Fragment>
        )
    }
}

export default withRouter(Title)

注意:goBack為歷史記錄的后退,而goForward為前進(jìn),兩個(gè)函數(shù)后可以在路由組件找到

9. React-Router-Dom6

安裝

npm i react-router-dom@6
  • 9.1 概述

內(nèi)置組件以及寫法有些改變,函數(shù)式組件被官方明確推薦,又新增10個(gè)hooks

  • 9.2 改變

9.2.1 刪除Switch,新增Routes

import {NavLink, Routes, Route} from "react-router-dom"

<Routes>
    <Route path="/about" element={<About/>}/>
    <Route path="/home" element={<Home/>}/>
</Routes>

9.2.2 重定向

import {NavLink, Routes, Route} from "react-router-dom"

<Routes>
    <Route path="/about" element={<About/>}/>
    <Route path="/home" element={<Home/>}/>
    <Route path="/" element={<Navigate to="/about"/>}/>
</Routes>

9.2.3 NavLink高亮

<NavLink to="/about" className={({isActive}) => isActive ? "list-group-item active":"list-group-item"}>About</NavLink>

在react-router-dom6中可以用函數(shù)的方式返回出樣式

9.2.4 路由表

import {NavLink, useRoutes} from "react-router-dom"
const element = useRoutes(route)

我們可以通過(guò)路由表的方式生成路由

import About from "../pages/About";
import Home from "../pages/Home";
import {Navigate} from "react-router-dom";

export const route = [
    {
        path: "/about",
        element: <About/>
    },
    {
        path: "/home",
        element: <Home/>
    },
    {
        path: "/",
        element: <Navigate to="/about"/>
    }
]

9.2.5 Outlet

多級(jí)路由也可以寫在路由表里,但是需要Outlet配合,類似Vue的roter-view

多級(jí)路由的路由表

import About from "../pages/About";
import Home from "../pages/Home";
import Message from "../pages/Message";
import News from "../pages/News";
import {Navigate} from "react-router-dom";

export const route = [
    {
        path: "/about",
        element: <About/>
    },
    {
        path: "/home",
        element: <Home/>,
        children: [
            {
                path: "news",
                element: <News/>
            },
            {
                path: "message",
                element: <Message/>
            }
        ]
    },
    {
        path: "/",
        element: <Navigate to="/about"/>
    }
]

子路由可以用children來(lái)寫,類型也是數(shù)組,注意路徑不要加 “/”

Outlet是子路由的出口

import React, {Fragment, useState} from "react"
import {Navigate,Outlet,NavLink} from "react-router-dom"

export default function Home() {
    const [sum, setSum] = useState(1)

    return (
        <Fragment>
            <h3>Home</h3>
            {sum === 2 ? <Navigate to="/about"/> : <h4>當(dāng)前sum為{sum}</h4>}
            <button onClick={() => setSum(sum + 1)}>點(diǎn)我加一</button>
            <NavLink to="message">message</NavLink>
            <NavLink to='news'>news</NavLink>
            <Outlet/>
        </Fragment>
    )
}
  • 9.3 Params參數(shù)

9.3.1 傳遞Params參數(shù)

import React, {Fragment, useState} from "react"
import {Link, Outlet} from "react-router-dom"

export default function Message() {

    const [message] = useState([
        {id: "001", title: "消息1", content: "鋤禾日當(dāng)午"},
        {id: "002", title: "消息2", content: "汗滴禾下土"},
        {id: "003", title: "消息3", content: "誰(shuí)知盤中餐"},
        {id: "004", title: "消息4", content: "粒粒皆辛苦"},
    ])

    return (
        <Fragment>
            <ul>
                {
                    message.map((_item) => {
                        return <li><Link
                            to={`detail/${_item.id}/${_item.title}/${_item.content}`}>
                            {_item.title}
                        </Link></li>
                    })
                }
            </ul>
            <hr/>
            <Outlet/>
        </Fragment>
    )
}

和react-router-dom5版本一樣在路徑后面加

9.3.2接收Params參數(shù)

路由表需要接收Params參數(shù)

import About from "../pages/About";
import Home from "../pages/Home";
import Message from "../pages/Message";
import News from "../pages/News";
import Detail from "../pages/Detail";
import {Navigate} from "react-router-dom";

export const route = [
    {
        path: "/about",
        element: <About/>
    },
    {
        path: "/home",
        element: <Home/>,
        children: [
            {
                path: "news",
                element: <News/>
            },
            {
                path: "message",
                element: <Message/>,
                children: [
                    {
                        path: "detail/:id/:title/:content",
                        element: <Detail/>
                    }
                ]
            }
        ]
    },
    {
        path: "/",
        element: <Navigate to="/about"/>
    }
]

9.9.3 useParams

import React, {Fragment} from "react"
import {useParams} from "react-router-dom"

export default function Detail() {
    const {id, title, content} = useParams()
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
        </Fragment>
    )
}

9.9.4 useMatch

import React, {Fragment} from "react"
import {useMatch} from "react-router-dom"

export default function Detail() {
    const {id, title, content} = useMatch("/home/message/detail/:id/:title/:content").params
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
        </Fragment>
    )
}

注意useMatch這個(gè)hook要求把整個(gè)路徑全部當(dāng)為參數(shù)傳遞進(jìn)去

  • 9.4 Search參數(shù)

9.4.1 傳遞Search參數(shù)

import React, {Fragment, useState} from "react"
import {Link, Outlet} from "react-router-dom"

export default function Message() {

    const [message] = useState([
        {id: "001", title: "消息1", content: "鋤禾日當(dāng)午"},
        {id: "002", title: "消息2", content: "汗滴禾下土"},
        {id: "003", title: "消息3", content: "誰(shuí)知盤中餐"},
        {id: "004", title: "消息4", content: "粒粒皆辛苦"},
    ])

    return (
        <Fragment>
            <ul>
                {
                    message.map((_item) => {
                        return <li key={_item.id}><Link
                            to={`detail?id=${_item.id}&title=${_item.title}&content=${_item.content}`}>
                            {_item.title}
                        </Link></li>
                    })
                }
            </ul>
            <hr/>
            <Outlet/>
        </Fragment>
    )

注意Search不需要接收

9.4.2 useSearchParams

import React, {Fragment} from "react"
import {useSearchParams} from "react-router-dom"

export default function Detail() {
    const [search, setSearch] = useSearchParams()
    const id = search.get("id")
    const title = search.get("title")
    const content = search.get("content")
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
            <button onClick={() => {
                setSearch('id=008&title=哈哈&content=嘻嘻')
            }}>點(diǎn)我更新Search
            </button>
        </Fragment>
    )
}

這個(gè)hook類似useState,生成兩個(gè),我們需要調(diào)用get方法以及合適的字段,就能拿到相應(yīng)的狀態(tài)

  • 9.5 state參數(shù)

9.5.1 傳遞state參數(shù)

import React, {Fragment, useState} from "react"
import {Link, Outlet} from "react-router-dom"

export default function Message() {

    const [message] = useState([
        {id: "001", title: "消息1", content: "鋤禾日當(dāng)午"},
        {id: "002", title: "消息2", content: "汗滴禾下土"},
        {id: "003", title: "消息3", content: "誰(shuí)知盤中餐"},
        {id: "004", title: "消息4", content: "粒粒皆辛苦"},
    ])

    return (
        <Fragment>
            <ul>
                {
                    message.map((_item) => {
                        return <li key={_item.id}><Link
                            to="detail"
                            state={{
                                id: _item.id,
                                title: _item.title,
                                content: _item.content
                            }}
                        >{_item.title}
                        </Link></li>
                    })
                }
            </ul>
            <hr/>
            <Outlet/>
        </Fragment>
    )
}

9.5.2 useLocation

import React, {Fragment} from "react"
import {useLocation} from "react-router-dom"

export default function Detail() {
    const {state: {id, title, content}} = useLocation()
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
        </Fragment>
    )
}

我們需要連續(xù)解構(gòu)賦值,在useLocation中將狀態(tài)state解構(gòu),再將想要的狀態(tài)從stae中結(jié)構(gòu)

  • 9.6 編程式路由導(dǎo)航

9.6.1 useNavigate

import React, {Fragment, useState} from "react"
import {Link, Outlet, useNavigate} from "react-router-dom"

export default function Message() {
    const navigate = useNavigate()

    function showDetail(item) {
        navigate("detail", {
            replace: false,
            state: {
                id: item.id,
                title: item.title,
                content: item.content
            }
        })
    }

    const [message] = useState([
        {id: "001", title: "消息1", content: "鋤禾日當(dāng)午"},
        {id: "002", title: "消息2", content: "汗滴禾下土"},
        {id: "003", title: "消息3", content: "誰(shuí)知盤中餐"},
        {id: "004", title: "消息4", content: "粒粒皆辛苦"},
    ])

    return (
        <Fragment>
            <ul>
                {
                    message.map((_item) => {
                        return <li key={_item.id}><Link
                            to="detail"
                            state={{
                                id: _item.id,
                                title: _item.title,
                                content: _item.content
                            }}
                        >{_item.title}
                        </Link>
                            <button onClick={() => {
                                showDetail(_item)
                            }}>查看詳情
                            </button>
                        </li>
                    })
                }

            </ul>
            <hr/>
            <Outlet/>
        </Fragment>
    )
}

我們要用useNavigate構(gòu)造一個(gè)實(shí)例就是navigate是一個(gè)函數(shù),我們可以傳遞兩個(gè)參數(shù),第一個(gè)是路徑,第二個(gè)是一個(gè)對(duì)象

9.6.2 前進(jìn)和后退

import React, {Fragment} from "react";
import {useNavigate} from "react-router-dom"

export default function Title() {

    const navigate = useNavigate()

    function back() {
        navigate(-1)
    }

    function forWord() {
        navigate(1)
    }

    return (
        <Fragment>
            <h2 style={{marginLeft: "50px"}}>React Router Demo</h2>
            <button onClick={forWord}>前進(jìn)-》</button>
            <button onClick={back}>《-后退</button>
            <hr/>
        </Fragment>
    )
}

我們可以調(diào)用navigate這個(gè)函數(shù),參是是-1是后退,1是前進(jìn)

9.6.3 注意:

如果我們要傳遞state可以放到navigate函數(shù)的第二個(gè)參數(shù)里,別的參數(shù)形式,我們要直接拼接到url里

10. useInRouterContext

該hook是判斷組件是否在路由的上下文中,在返回true,反之false

import React, {Fragment} from "react"
import {useLocation, useInRouterContext} from "react-router-dom"

export default function Detail() {
    const {state: {id, title, content}} = useLocation()
    console.log(useInRouterContext())
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
        </Fragment>
    )
}

11. useNavigationType

該hook返回的是導(dǎo)航的類型為3種,POP為頁(yè)面刷新,還有PUSH,REPLACE

import React, {Fragment} from "react"
import {useLocation, useNavigationType} from "react-router-dom"

export default function Detail() {
    const {state: {id, title, content}} = useLocation()
    console.log(useNavigationType())
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
        </Fragment>
    )
}

12. useOutlet

該hook是用來(lái)展現(xiàn)當(dāng)前組件中嵌套的路由組件

import React, {Fragment, useState} from "react"
import {Navigate,Outlet,NavLink,useOutlet} from "react-router-dom"

export default function Home() {
    const [sum, setSum] = useState(1)
    console.log(useOutlet())
    return (
        <Fragment>
            <h3>Home</h3>
            {sum === 2 ? <Navigate to="/about"/> : <h4>當(dāng)前sum為{sum}</h4>}
            <button onClick={() => setSum(sum + 1)}>點(diǎn)我加一</button>
            <NavLink to="message">message</NavLink>
            <NavLink to='news'>news</NavLink>
            <Outlet/>
        </Fragment>
    )
}

注意,若組件子路由組件沒(méi)掛載就返回NULL,反之返回路由對(duì)象

13.useResolvedPath

該hook是幫我們解析路徑的,可以分析出路徑,以及各種參數(shù)

import React, {Fragment} from "react"
import {useLocation, useResolvedPath} from "react-router-dom"

export default function Detail() {
    const {state: {id, title, content}} = useLocation()
    console.log(useResolvedPath())
    return (
        <Fragment>
            <ol>
                <li>{id}</li>
                <li>{title}</li>
                <li>{content}</li>
            </ol>
        </Fragment>
    )
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React中Ref的作用小結(jié)

    React中Ref的作用小結(jié)

    本文文章介紹了React中的Ref概念,包括其基礎(chǔ)概念、使用方式,并討論了在React中通過(guò)Ref操作DOM值時(shí)避免組件不更新的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • React簡(jiǎn)單介紹

    React簡(jiǎn)單介紹

    React 是一個(gè)用于構(gòu)建用戶界面的 JavaScript 庫(kù),主要用于構(gòu)建 UI,而不是一個(gè) MVC 框架,React 擁有較高的性能,代碼邏輯非常簡(jiǎn)單,越來(lái)越多的人已開始關(guān)注和使用它
    2017-05-05
  • react18中react-redux狀態(tài)管理的實(shí)現(xiàn)

    react18中react-redux狀態(tài)管理的實(shí)現(xiàn)

    本文主要介紹了react18中react-redux狀態(tài)管理的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 淺談React-router v6 實(shí)現(xiàn)登錄驗(yàn)證流程

    淺談React-router v6 實(shí)現(xiàn)登錄驗(yàn)證流程

    本文主要介紹了React-router v6 實(shí)現(xiàn)登錄驗(yàn)證流程,主要介紹了公共頁(yè)面、受保護(hù)頁(yè)面和登錄頁(yè)面,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 使用React和Redux Toolkit實(shí)現(xiàn)用戶登錄功能

    使用React和Redux Toolkit實(shí)現(xiàn)用戶登錄功能

    在React中,用戶登錄功能是一個(gè)常見的需求,為了實(shí)現(xiàn)該功能,需要對(duì)用戶輸入的用戶名和密碼進(jìn)行驗(yàn)證,并將驗(yàn)證結(jié)果保存到應(yīng)用程序狀態(tài)中,在React中,可以使用Redux Toolkit來(lái)管理應(yīng)用程序狀態(tài),從而實(shí)現(xiàn)用戶登錄功能,需要詳細(xì)了解可以參考下文
    2023-05-05
  • 淺談React多個(gè)setState會(huì)調(diào)用幾次

    淺談React多個(gè)setState會(huì)調(diào)用幾次

    在React的生命周期鉤子和合成事件中,多次執(zhí)行setState,會(huì)被調(diào)用幾次,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2021-11-11
  • React Native自定義Android的SSL證書鏈校驗(yàn)

    React Native自定義Android的SSL證書鏈校驗(yàn)

    這篇文章主要為大家介紹了React Native自定義Android的SSL證書鏈校驗(yàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • React實(shí)現(xiàn)一個(gè)支持動(dòng)態(tài)插槽的Layout組件

    React實(shí)現(xiàn)一個(gè)支持動(dòng)態(tài)插槽的Layout組件

    這篇文章主要為大家詳細(xì)介紹了如何使用React實(shí)現(xiàn)一個(gè)支持動(dòng)態(tài)注冊(cè)內(nèi)容的插槽組件,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以了解一下
    2025-02-02
  • React高階組件使用教程詳解

    React高階組件使用教程詳解

    高階組件就是接受一個(gè)組件作為參數(shù)并返回一個(gè)新組件(功能增強(qiáng)的組件)的函數(shù)。這里需要注意高階組件是一個(gè)函數(shù),并不是組件,這一點(diǎn)一定要注意,本文給大家分享React 高階組件HOC使用小結(jié),一起看看吧
    2022-12-12
  • react使用useState修改對(duì)象或者數(shù)組的值無(wú)法改變視圖的問(wèn)題

    react使用useState修改對(duì)象或者數(shù)組的值無(wú)法改變視圖的問(wèn)題

    這篇文章主要介紹了react使用useState修改對(duì)象或者數(shù)組的值無(wú)法改變視圖的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論