如何在 url 更改但不替换 Next.js 中的整个页面时添加其他信息
How to add additional information when the url changes but not replacing the entire page in Next.js
我是 Next.js 的新人,我需要你的帮助。我有一条名为“workPage”的路线,它有其他导航链接,点击后,我想向用户显示新信息以及“workPage”上的内容,但我不知道如何在 Next.js.在React.js,这真的很容易。有人可以帮我吗?下面的代码应该演示我想做什么。
这是工作页面组件
import { useRouter } from "next/router";
const WorkPage =()=> {
const {push} =useRouter()
const navigateHandler =()=> {
push(`/work/wiki`)
}
return (
<div>
<h1>This is Work Page.</h1>
<p>Content of work page.</p>
<button onClick={navigateHandler}>Go to work/wiki</button>
</div>
)
}
我有另一个名为 WorkDetail 的组件
const WorkDetail =()=> {
return (
<div>
<h1>This is Work Detail Page.</h1>
</div>
)
}
就是这样。单击 workPage
上的按钮时,URL 将为 /work/wiki
,我想显示 WorkDetail
组件以及 workPage
[=18 上的内容=]
在 Next.js next/link is used for user navigation. next/router 用于编程路由或检索路由信息。
您还需要创建 pages that render your page specific components. Another helpful resource is the Next.js routing 页面。
pages/work/index.js
import Link from "next/link";
const WorkPage = () => (
<Link href="/work/wiki">
<a>Go to work/wiki</a>
</Link>
)
export default WorkPage;
注意:next/link
需要一个空的锚标记作为子组件。
pages/work/wiki.js
import YourWorkDetailComponent from '../path/to/component';
const WikiPage = () => (
<>
<Link href="/work">
<a>Go to work</a>
</Link>
<YourWorkDetailComponent />
</>
);
export default WikiPage;
更新:
您可以通过使用 Link
component for updating the url and useState
在单击时显示 workDetail 组件来实现它。
//import { useRouter } from "next/router";
import { useState } from "react";
import Link from "next/link";
const WorkPage =()=> {
//const {push} =useRouter();
const [wikiDisplay, setWikiDisplay] = useState(false);
const navigateHandler = () => {
setWikiDisplay(true);
};
return (
<div>
<h1>This is Work Page.</h1>
<p>Content of work page.</p>
<Link href='/workPage' as='/workPage/work/wiki' ><a onClick={navigateHandler}>Furniture</a></Link>
{wikiDisplay && <WorkDetail>}
</div>
)
}
如果您需要一个按钮而不是 link ,请使用按钮组件包装它。
解决该问题的另一种方法是使用 .replaceState
,但最不推荐。
因为您需要使用 .replaceState
for updating the url and useState
在单击按钮时显示 workDetail 组件。
然后您的 workPage 组件应该如下所示:
//import { useRouter } from "next/router";
import { useState } from "react";
const WorkPage =()=> {
//const {push} =useRouter();
const [wikiDisplay, setWikiDisplay] = useState(false);
const navigateHandler = () => {
window.history.replaceState(null, "", "workPage/work/wiki");
setWikiDisplay(true);
};
return (
<div>
<h1>This is Work Page.</h1>
<p>Content of work page.</p>
<button onClick={navigateHandler} disabled={wikiDisplay}>Go to work/wiki</button>
{wikiDisplay && <WorkDetail>}
</div>
)
}
并且按钮被禁用,因为对于一个页面,详情页面应该加载一次。
注意 :这两种方法都是假设 url 在按钮单击之前和按钮单击时是 /workPage url 应该是 /workPage/work/wiki.
我是 Next.js 的新人,我需要你的帮助。我有一条名为“workPage”的路线,它有其他导航链接,点击后,我想向用户显示新信息以及“workPage”上的内容,但我不知道如何在 Next.js.在React.js,这真的很容易。有人可以帮我吗?下面的代码应该演示我想做什么。
这是工作页面组件
import { useRouter } from "next/router";
const WorkPage =()=> {
const {push} =useRouter()
const navigateHandler =()=> {
push(`/work/wiki`)
}
return (
<div>
<h1>This is Work Page.</h1>
<p>Content of work page.</p>
<button onClick={navigateHandler}>Go to work/wiki</button>
</div>
)
}
我有另一个名为 WorkDetail 的组件
const WorkDetail =()=> {
return (
<div>
<h1>This is Work Detail Page.</h1>
</div>
)
}
就是这样。单击 workPage
上的按钮时,URL 将为 /work/wiki
,我想显示 WorkDetail
组件以及 workPage
[=18 上的内容=]
在 Next.js next/link is used for user navigation. next/router 用于编程路由或检索路由信息。
您还需要创建 pages that render your page specific components. Another helpful resource is the Next.js routing 页面。
pages/work/index.js
import Link from "next/link";
const WorkPage = () => (
<Link href="/work/wiki">
<a>Go to work/wiki</a>
</Link>
)
export default WorkPage;
注意:next/link
需要一个空的锚标记作为子组件。
pages/work/wiki.js
import YourWorkDetailComponent from '../path/to/component';
const WikiPage = () => (
<>
<Link href="/work">
<a>Go to work</a>
</Link>
<YourWorkDetailComponent />
</>
);
export default WikiPage;
更新:
您可以通过使用 Link
component for updating the url and useState
在单击时显示 workDetail 组件来实现它。
//import { useRouter } from "next/router";
import { useState } from "react";
import Link from "next/link";
const WorkPage =()=> {
//const {push} =useRouter();
const [wikiDisplay, setWikiDisplay] = useState(false);
const navigateHandler = () => {
setWikiDisplay(true);
};
return (
<div>
<h1>This is Work Page.</h1>
<p>Content of work page.</p>
<Link href='/workPage' as='/workPage/work/wiki' ><a onClick={navigateHandler}>Furniture</a></Link>
{wikiDisplay && <WorkDetail>}
</div>
)
}
如果您需要一个按钮而不是 link ,请使用按钮组件包装它。
解决该问题的另一种方法是使用 .replaceState
,但最不推荐。
因为您需要使用 .replaceState
for updating the url and useState
在单击按钮时显示 workDetail 组件。
然后您的 workPage 组件应该如下所示:
//import { useRouter } from "next/router";
import { useState } from "react";
const WorkPage =()=> {
//const {push} =useRouter();
const [wikiDisplay, setWikiDisplay] = useState(false);
const navigateHandler = () => {
window.history.replaceState(null, "", "workPage/work/wiki");
setWikiDisplay(true);
};
return (
<div>
<h1>This is Work Page.</h1>
<p>Content of work page.</p>
<button onClick={navigateHandler} disabled={wikiDisplay}>Go to work/wiki</button>
{wikiDisplay && <WorkDetail>}
</div>
)
}
并且按钮被禁用,因为对于一个页面,详情页面应该加载一次。
注意 :这两种方法都是假设 url 在按钮单击之前和按钮单击时是 /workPage url 应该是 /workPage/work/wiki.