React-Router) nested routing
24247 ワード
まず、ネストされたルーティングを表示する前に、いくつかのコンポーネントを理解する必要があります.
まさに
変数を作成し、getInvoices関数を実行してデータを返します.
再インデックス.jsでネストされたルーティングをどのように実現したかを考えてみましょう.
invoices.jsxでは、
ここで思い出すのはindex.jsでネストされたルーティングを実現するラベルです.
userParamsはreact-routerのhookです.
=「urlpathをお持ちですか?params変数に保存しておきます~」
:invoiceIdはキーで、値はparamsです.InvoiceIdという名前ですか?
では、領収書です.jsでは、オブジェクトを受信して画面に描画します.
まさに
< Outlet / >
Outlet素子は何ですか?Jaeme.devのブログを参考にしました Data.jsx
let invoices = [
{
name: "Santa Monica",
number: 1995,
amount: "$10,800",
due: "12/05/1995",
},
{
name: "Stankonia",
number: 2000,
amount: "$8,000",
due: "10/31/2000",
},
{
name: "Ocean Avenue",
number: 2003,
amount: "$9,500",
due: "07/22/2003",
},
{
name: "Tubthumper",
number: 1997,
amount: "$14,000",
due: "09/01/1997",
},
{
name: "Wide Open Spaces",
number: 1998,
amount: "$4,600",
due: "01/27/1998",
},
];
export function getInvoices() {
return invoices;
}
export function getInvoice(number) {
return invoices.find(
(invoice) => invoice.number === number
);
}
app.js
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import Hello from './page/hello.jsx';
import Invoices from './page/invoices.jsx';
import Invoice from './route/invoice.jsx'
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<Routes>
<Route path="/" element={<App />} />
<Route path="/hello" element={<Hello />} />
<Route path="/invoices" element={<Invoices />}>
<Route path=":invoiceId" element={<Invoice />} />
</ Route>
<Route
path="*"
element={
<main style={{ padding: "1rem" }}>
<p>There's nothing here!</p>
</main>
}
/>
</Routes>
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
app.jsをよく見ると、もう一つルートラベルで包まれたルートラベルがあります.ルータの最新バージョンでサポートされているネストされたルーティングに応答します.サブラベルで記入するのは直感的です.invoices.js
import React from 'react';
import { getInvoices } from '../data/data';
import { Link, Outlet } from 'react-router-dom';
const invoices = () => {
let invoices = getInvoices();
return (
<div style={{ display: "flex" }}>
<nav
style={{
borderRight: "solid 1px",
padding: "1rem",
}}
>
{invoices.map((invoice) => (
<Link
style={{ display: "block", margin: "1rem 0" }}
to={`/invoices/${invoice.number}`}
key={invoice.number}
>
{invoice.name}
</Link>
))}
</nav>
<Outlet />
</div>
)
}
export default invoices
今、私はここでデータを受信してあなたに送信します.import { getInvoices } from '../data/data'
rogetInvoices関数(data)をインポートします.変数を作成し、getInvoices関数を実行してデータを返します.
.mapメソッドを使用してデータを巡回し、invoiceのnameのみを返します。
再インデックス.jsでネストされたルーティングをどのように実現したかを考えてみましょう.
invoices.jsxでは、
{invoices.map((invoice) => (
<Link
style={{ display: "block", margin: "1rem 0" }}
to={`/invoices/${invoice.number}`}
key={invoice.number}
>
{invoice.name}
</Link>
))}
もう1つのリンクは、to={/請求書/${invoice.number}でルーティングされます.ここで思い出すのはindex.jsでネストされたルーティングを実現するラベルです.
invoice.jsx
import { useParams } from "react-router-dom";
import { getInvoice } from '../data/data'
export default function Invoice() {
let params = useParams();
let invoice = getInvoice(parseInt(params.invoiceId, 10));
return (
<main style={{ padding: "1rem" }}>
<h2>Total Due: {invoice.amount}</h2>
<p>
{invoice.name}: {invoice.number}
</p>
<p>Due Date: {invoice.due}</p>
</main>
)
}
ここのuseParamsは何ですか?userParamsはreact-routerのhookです.
=「urlpathをお持ちですか?params変数に保存しておきます~」
また、ルートタグにはparams.invoiceIdのnumber値ではなく、ルートタグのpath値をネストする必要があります。画面でレンダリングするオブジェクトを返してください。
:invoiceIdはキーで、値はparamsです.InvoiceIdという名前ですか?
data.js
export function getInvoice(number) {
return invoices.find(
(invoice) => invoice.number === number
);
}
data.jsではfindメソッドはparamsである.invoiceId値と一致するオブジェクトを返します.では、領収書です.jsでは、オブジェクトを受信して画面に描画します.
Reference
この問題について(React-Router) nested routing), 我々は、より多くの情報をここで見つけました https://velog.io/@iamchho/React-Router-nested-routingテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol