React-Router使用总结

1.下载 React Router

npm install react-router-dom@6

2.连接URL:将应用程序连接到 浏览器的 URL。使用 BrowserRouter

# main.jsx
import { render } from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import App from './App'

const rootElement = document.getElementById('root')
render(
    <BrowserRouter>
    	<App />
    </BrowserRouter>,
    rootElement
)
# app.jsx
import { Link } from 'react-router-dom'

export default function App() {
    return(
    	<div>
            <h1>Book</h1>
            <nav>
            	<Link to="/invoices">Invoices</Link>
                <Link to="/expense">Expense</Link>
            </nav>
        </div>
    )
}

4.创建一个 Route Config。 使用嵌套路由。在 父路由 中嵌套 两个子路由。

#main.jsx
import { render } from 'react-dom'
import { 
    BrowserRouter,
    Routes,
    Route
       } from 'react-router-dom'
import App from './App'
import Expenses from './router/expenses'
import Invoices from './router/invoices'

const rootElement = document.getElementById('root')
render{
    <BrowserRouter>
        <Routes>
        	<Route path='/' element={<App />}>
            	<Route path='expenses' element={<Expenses />} />
            	<Route path='invoices' element={<Invoices />} />
            </Route>
        </Routes>
    </BrowserRouter>,
    rootElement
}

#app.jsx
import { Outlet, Link } from 'react-router-dom'

export default function App() {
    return(
    	<div>
        	<nav>
            	<Link to="/invoices">Invoices</Link>
                <Link to="/expenses">Expenses</Link>
            </nav>
            <Outlet />
        </div>
    )
}
<Link to={`/invoices/${invoice.number}`}>例子1</Link>

5.使用 useParams 获取 URL 中的参数

#main.jsx
<Route path="invoices" element={<Invoices />}>
	<Route path=":invoiceId" element={<Invoice />}>
</Route>
#invoice.jsx
import { useParams } from 'react-router-dom'

export default function Invoices() {
    let params = useParams()
    return(
        <h2>{params.invoiceId}</h2>
    )
}
注意:paramskey 和路由路径中的动态段一致
:invoiceId -> params.invoiceId

6.index 路由

<Route index element={} />
<NavLink className='red'/>

// function
<NavLink className={({ isActive }) => isActive ? 'red' : 'blue' }/>

8.搜索参数 使用 useSearchParams 实现

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

export default function Invoices() {
	let [searchParams, setSearchParams] = useSearchParams()

    return(
        <div>
        	<input 
                value={searchParams.get('filter') || ''} 
                onChange={(event) => {
                    let filter = event.target.value
                    if(filter){
                        setSearchParams({ filter })
                    }else{
                        setSearchParams({})
                    }
                }}
             />
        </div>
    )
}
  • setSearchParams()?filter=... 搜索参数放到URL 并重新呈现路由器

9.以编程方式导航 使用 vueNavigate()

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

export default function Invoice() {
    let navigate = useNavigate()
    return(
    	<button onClick={() => {
                navigate('/invoices')
            }}>
            返回
        </button>
    )
}