[React] Next.js
<p>Next.js 产品级的 React 框架 - 中文开发入门教学</p><p>这里先了解下是个神马东西~</p>
<p>与 <span> Review</span> 的不同在于,这个重在实践~</p>
<p> </p>
<p> </p>
<h2><span class="md-plain md-expand" style="color: rgba(0, 51, 102, 1)">安装过程</span></h2>
<hr>
<h3><span class="md-plain md-expand">官网</span></h3>
<p class="md-end-block md-p" style="margin-left: 30px"><span class="md-link md-pair-s">https://nextjs.org/docs/getting-started</span></p>
<p class="md-end-block md-p" style="margin-left: 30px"> </p>
<h3 class="md-end-block md-heading"><span class="md-plain">操作步骤</span></h3>
<ul>
<li>
<h4 class="md-end-block md-heading"><span class="md-plain" style="color: rgba(153, 204, 255, 1)">安装 Node.js</span></h4>
</li>
</ul>
<p class="md-end-block md-p" style="margin-left: 30px"><span class="md-link md-pair-s">https://nodejs.org/zh-cn/download/</span></p>
<ul>
<li>
<h4 class="md-end-block md-heading"><span class="md-plain" style="color: rgba(153, 204, 255, 1)">包管理器方式</span></h4>
</li>
</ul>
<p class="md-end-block md-p" style="margin-left: 30px"><span class="md-link md-pair-s">https://nodejs.org/zh-cn/download/package-manager/</span></p>
<ul>
<li>
<h4 class="md-end-block md-heading"><span class="md-plain" style="color: rgba(153, 204, 255, 1)">建立 NextJS 工程</span></h4>
</li>
</ul>
<p style="margin-left: 30px"><span class="md-plain" style="color: rgba(0, 0, 0, 1)">貌似next 13版本又发生了较大的升级。</span></p>
<p style="margin-left: 30px"><span class="md-plain" style="color: rgba(0, 0, 0, 1)">本教程的<span style="background-color: rgba(255, 153, 204, 1)">Node也需要是14版本</span>。</span></p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)"># 建立工程
$ npx create</span>-next-<span style="color: rgba(0, 0, 0, 1)">app@<span style="background-color: rgba(255, 153, 204, 1)"><strong>11.1.2</strong></span> myweb
# TypeScript 版本
$ npx create</span>-next-app@latest --<span style="color: rgba(0, 0, 0, 1)">typescript myweb_t
# 启动开发模式
$ cd myweb
$ npm run dev
</span><span style="color: rgba(0, 0, 0, 1)">>http://localhost:3000/</span></pre>
</div>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 128, 0, 1)"># 文件路由?添加一个文件,根据文件名自动添加路由。</span><br><span style="color: rgba(0, 128, 0, 1)"># 增加一个页面 About.js</span>
$ nano About.js
...
</span><span style="color: rgba(0, 0, 0, 1)">>http://localhost:3000/About</span>
<span style="color: rgba(0, 0, 0, 1)">
<span style="color: rgba(0, 128, 0, 1)"># 编译生产模式</span>
$ npm run build
$ </span><span style="color: rgba(0, 0, 255, 1)">ls</span> -<span style="color: rgba(0, 0, 0, 1)">a
$ </span><span style="color: rgba(0, 0, 255, 1)">ls</span><span style="color: rgba(0, 0, 0, 1)"> .next
$ npm start
</span><span style="color: rgba(0, 0, 0, 1)">>http://localhost:3000/</span></pre>
</div>
<ul>
<li>
<h4><span style="color: rgba(153, 204, 255, 1)">添加 bootstrap CSS</span></h4>
</li>
</ul>
<p style="margin-left: 30px">在“入口”文件_app.js中增强head的部分,添加一条 for css bootstrap.</p>
<ul>
<li>
<h4><span style="color: rgba(153, 204, 255, 1)">服务器前端</span></h4>
</li>
</ul>
<p style="margin-left: 30px">以前的多页面站点是在服务端渲染的,输出到浏览器时已经有了完整的骨架( html ),这样爬虫抓到时可以分析页面标题,内容等等,做 seo 容易,那时的技术栈是 jsp,php 等等。现在流行的前端框架在这方面是开了倒车,一个空的骨架,一个很大的 js,抓到浏览器以后才开始渲染完整的页面,爬虫就很为难了,因为它没法执行 js 啊,此外,白屏时间也是由于前端渲染带来的问题。于是又有了服务端渲染,让渲染这一步再回到服务端,在服务端模拟浏览器环境,给 react 和 vue 等框架一个可执行的上下文,就是为了提前得到完整的 html。前端就是这么扯蛋。 </p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(51, 153, 102, 1)">// 原来设置在了./api的位置</span><br><br>export <span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> handler(req, res) {
res.status(</span>200).json({ name: 'John Doe'<span style="color: rgba(0, 0, 0, 1)"> })
}</span></pre>
</div>
<p> </p>
<p> </p>
<p> </p>
<h2><span style="color: rgba(0, 51, 102, 1)">路由 Routes</span></h2>
<hr>
<h3>文件路由</h3>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 128, 1)">http://localhost:3000/news/top
http://localhost:3000/news/</span></pre>
</div>
<p style="margin-left: 30px"><img src="https://img2023.cnblogs.com/blog/310015/202305/310015-20230529181613903-1064842556.png" alt="" loading="lazy"></p>
<p style="margin-left: 30px"> </p>
<p style="margin-left: 60px"><span style="color: rgba(0, 0, 255, 1)">== 以下是react的形态 ==</span></p>
<p style="margin-left: 60px"><span style="color: rgba(0, 0, 0, 1)">next.js 省略以下文件。</span></p>
<div class="cnblogs_code" style="margin-left: 60px">
<pre><span style="color: rgba(0, 0, 0, 1); background-color: rgba(192, 192, 192, 1)">// App.js<br></span></pre>
<pre>import PageHome from './components/PageHome';
import PageAbout from './components/PageAbout';
import PageNews from './components/PageNews';</pre>
<pre><span style="color: rgba(0, 0, 0, 1)"><br>function App() {
return (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Header</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">Header</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">="p-4"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Route </span><span style="color: rgba(255, 0, 0, 1)">path</span><span style="color: rgba(0, 0, 255, 1)">="/"</span><span style="color: rgba(255, 0, 0, 1)"> exact</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">PageHome</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">PageHome</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Route</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Route </span><span style="color: rgba(255, 0, 0, 1)">path</span><span style="color: rgba(0, 0, 255, 1)">="/news"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">PageNews</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">PageNews</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Route</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Route </span><span style="color: rgba(255, 0, 0, 1)">path</span><span style="color: rgba(0, 0, 255, 1)">="/about"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">PageAbout</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">PageAbout</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Route</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
);
}</span></pre>
</div>
<p> </p>
<h3>路由参数</h3>
<p style="margin-left: 30px"><img src="https://img2023.cnblogs.com/blog/310015/202305/310015-20230529183638908-1934862827.png" alt="" loading="lazy"></p>
<ul>
<li>
<h4>news/id </h4>
</li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">import React from "react";
import { useRouter } from "<em><span style="color: rgba(0, 0, 128, 1)">next/dist/client/router</span></em>";
const newsid = () => {
const <strong>router</strong> = useRouter();
console.log(<strong>router</strong>.<span style="background-color: rgba(204, 255, 204, 1)">pathname</span>);
console.log(<strong>router</strong>.<span style="background-color: rgba(204, 255, 255, 1)">query</span>);
return (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">React</span><span style="color: rgba(255, 0, 0, 1)">.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>newsid<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span><span style="color: rgba(0, 0, 0, 1)">
{<strong>router</strong>.pathname && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.<span style="background-color: rgba(204, 255, 204, 1)">pathname</span>}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
{<strong>router</strong>.query.id && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.<span style="background-color: rgba(204, 255, 255, 1)">query</span>.<span style="background-color: rgba(255, 255, 153, 1)">id</span>}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">React.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)
}
export default newsid;</span></pre>
</div>
<ul>
<li>
<h4>blog/tag/id</h4>
</li>
</ul>
<div class="cnblogs_code" style="margin-left: 30px"><img src="https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" id="code_img_closed_628f28df-64bd-4549-8b92-0a2c02313a3c" class="code_img_closed"><img src="https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" id="code_img_opened_628f28df-64bd-4549-8b92-0a2c02313a3c" class="code_img_opened" style="display: none">
<div id="cnblogs_code_open_628f28df-64bd-4549-8b92-0a2c02313a3c" class="cnblogs_code_hide" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">import React from "react";
import { useRouter } from "next/dist/client/router";
const newsid = () => {
const router = useRouter();
console.log(router.pathname);
console.log(router.query);
return (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">React</span><span style="color: rgba(255, 0, 0, 1)">.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>newsid<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span><span style="color: rgba(0, 0, 0, 1)">
{router.pathname && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.pathname}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
{router.query.tag && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.query.tag}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
{router.query.id && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.query.id}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">React.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)
}
export default newsid;</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p> </p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain md-expand">"动态" 匹配路径</span></h3>
<p style="margin-left: 30px"><img src="https://img2023.cnblogs.com/blog/310015/202305/310015-20230529184536001-203082740.png" alt="" loading="lazy"></p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre>http://127.0.0.1:3000/isbn<span style="background-color: rgba(204, 255, 204, 1)">/aa/bb/cc</span></pre>
</div>
<p style="margin-left: 30px">变量slug代表的对象 <span style="color: rgba(128, 128, 0, 1)">反映了 isbn 后的部分。可以拥有“编程”</span>。(实用)</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">import React from "react";
import { useRouter } from "next/dist/client/router";
const slug = () => {
const router = useRouter();
console.log(router.pathname);
console.log(router.query);
return (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">React</span><span style="color: rgba(255, 0, 0, 1)">.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>newsid<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span><span style="color: rgba(0, 0, 0, 1)">
{router.pathname && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.pathname}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
{router.query.slug && (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span>{router.query.<span style="background-color: rgba(204, 255, 204, 1)">slug</span>.join(',')}<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h3</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">React.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)
}
export default slug;</span></pre>
</div>
<p> </p>
<ul>
<li style="list-style-type: none">
<ul>
<li>
<h4 class="style-scope ytd-watch-metadata">Routes - 链接路径传递参数</h4>
</li>
</ul>
</li>
</ul>
<p style="margin-left: 60px">如下这么搞,为何不直接使用:pathname: "/news/001"? 而是采用这种JSON of query的形式?</p>
<p style="margin-left: 60px">以下包含了<span style="color: rgba(255, 102, 0, 1)">“链接 link”</span>与<span style="color: rgba(255, 102, 0, 1)">“按钮 router.push”</span>两种点击方式。</p>
<div class="cnblogs_code" style="margin-left: 60px">
<pre><span style="color: rgba(0, 0, 0, 1)">import Head from 'next/head'
import Link from 'next/link'
import { useRouter } from 'next/dist/client/router'
export default function Home() {
const router = useRouter();
const <span style="color: rgba(0, 0, 255, 1)"><strong>btn_click</strong></span> = () => {
<strong>router.push</strong>({
pathname: '/news/',
query: { id: '001' }
})
}
return (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Head</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">></span>Create Next App<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">title</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">meta </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="description"</span><span style="color: rgba(255, 0, 0, 1)"> content</span><span style="color: rgba(0, 0, 255, 1)">="Generated by create next app"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">link </span><span style="color: rgba(255, 0, 0, 1)">rel</span><span style="color: rgba(0, 0, 255, 1)">="icon"</span><span style="color: rgba(255, 0, 0, 1)"> href</span><span style="color: rgba(0, 0, 255, 1)">="/favicon.ico"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Head</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">main</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>Next.js<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Link </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">="/About"</span> <span style="color: rgba(0, 0, 255, 1)">></span>About<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Link</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Link </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">={{
</span><span style="color: rgba(255, 0, 0, 1)">pathname: "/news/[<span style="background-color: rgba(204, 255, 204, 1)">id</span>]",
query: { <span style="background-color: rgba(204, 255, 204, 1)">id</span>: '001' }
}}</span><span style="color: rgba(0, 0, 255, 1)">></span>新闻001<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Link</span><span style="color: rgba(0, 0, 255, 1)">><</span><span style="color: rgba(128, 0, 0, 1)">br </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Link </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">={{
</span><span style="color: rgba(255, 0, 0, 1)">pathname: "/news/",
query: { id: '002' }
}}</span><span style="color: rgba(0, 0, 255, 1)">></span>新闻002<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Link</span><span style="color: rgba(0, 0, 255, 1)">><</span><span style="color: rgba(128, 0, 0, 1)">br </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Link </span><span style="color: rgba(255, 0, 0, 1)">href</span><span style="color: rgba(0, 0, 255, 1)">={{
</span><span style="color: rgba(255, 0, 0, 1)">pathname: "/news/",
query: { id: '003' }
}}</span><span style="color: rgba(0, 0, 255, 1)">></span>新闻003<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">Link</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">main</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">hr </span><span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">className</span><span style="color: rgba(0, 0, 255, 1)">="btn btn-success"</span><span style="color: rgba(255, 0, 0, 1)"> onClick</span><span style="color: rgba(0, 0, 255, 1)">={<strong>btn_click</strong>}</span><span style="color: rgba(0, 0, 255, 1)">></span>新闻001<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">div</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)
}</span></pre>
</div>
<p> </p>
<h3>404 页面</h3>
<p style="margin-left: 30px">默认的名字。</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 0, 0, 1)">import React from "react";
const <span style="background-color: rgba(204, 255, 204, 1)">Page404</span> = () => {
return (
</span><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">React</span><span style="color: rgba(255, 0, 0, 1)">.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>Page404<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">h1</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">React.Fragment</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="color: rgba(0, 0, 0, 1)">
)
}
export default <span style="background-color: rgba(204, 255, 204, 1)">Page404</span>;</span></pre>
</div>
<p> </p>
<div> </div><br><br>
来源:https://www.cnblogs.com/jesse123/p/17438687.html
頁:
[1]