发表更新1 分钟读完 (大约184个字)
react router
react router V6
安装
使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'
<Router> <Routes> <Route path={"/"} element={<App />} > <Route path={"invoices"} element={<Invoices />} > // index类型route,当没有任何选中的时候展示这个 <Route index element={ <div> select a invoice </div> }/> <Route path=':invoiceId' element={<Invoice/>}/> </Route> <Route path={"expenses"} element={<Expenses />} /> </Route> // 404所有的不匹配的时候展示 <Route path={"*"} element={ <div> not found </div> } /> </Routes> </Router>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import { Outlet, NavLink, useSearchParams } from 'react-router-dom' import { getInvoices } from "./data"
export default function Invoices() { const invoices = getInvoices() const [searchParams, setSearchParams] = useSearchParams()
return ( <div style={{ display: 'flex', flexDirection: 'column' }}> <input type="text" value={searchParams.get('filter') || ""} onChange={(e) => { let filter = e.target.value if (filter) { setSearchParams({filter}) } else { setSearchParams({}) } }} /> <nav style={{ padding: '1rem', borderRight: "solid 1px", marginRight: "2rem" }}> { invoices .filter(invoice => { let value = searchParams.get('filter') if (!value) { return true } return invoice.name.startsWith(value) }) .map((invoice) => ( <NavLink style={({ isActive }) => ({ display: "block", margin: "1rem 0", color: isActive ? "red" : "" })} to={`/invoices/${invoice.number}`} key={invoice.number} > {invoice.name} </NavLink> )) } </nav> <Outlet /> </div> ); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import { useParams } from 'react-router-dom' import { getInvoice } from './data'
export default function Invoice() { let params = useParams() let invoice = getInvoice(parseInt(params.invoiceId || "1"))
return ( <div> <h2>Invoice {params.invoiceId}</h2> <p> {invoice?.name}: {invoice?.number} </p> <p>Due Date: {invoice?.due}</p> </div>
) }
|