Nic*_*ick 6 javascript next.js apollo-client
语境
我正在使用 Next.js 13。我正在使用 apollo 客户端来存储一些客户端变量。
我正在尝试做什么
我试图在导航到 href 位置之前执行 onClick 函数。
我的代码
<Link
href={`/session/${session.id}`}
onClick={() => {
updateDialogVars({
dialogOpen: ATTENDANCE_DIALOG,
})
}}
>
<div>
stuff
</div>
</Link>
Run Code Online (Sandbox Code Playgroud)
updateDialogVars 是一个突变,更新 apollo 客户端中的反应变量。
问题
是否可以使用 Next.js Link 组件并在使用 href 进行路由之前执行 onClick 事件?在 onClick 函数执行后,将 Link 更改为 div 并使用下一个路由器来推送路由更改的唯一选项是?
这通常是通过按钮和路由器钩子而不是锚标记(链接)来实现的。
import { useRouter } from "next/router"; // if you use pages dir
import { useRouter } from "next/navigation"; // if you use app dir
const SomeComponent = () => {
const router = useRouter();
const onClick = async () => {
updateDialogVars(...yourConfig);
if(someCondition) {
await router.push(`/session/${session.id}`);
}
}
return (
<button onClick={onClick}>Label</button>
)
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用 next/link 获得类似的结果。
import { useRouter } from "next/router"; // if you use pages dir
import { useRouter } from "next/navigation"; // if you use app dir
import Link from "next/link";
const SomeComponent = () => {
const router = useRouter();
const onClick = async (event) => {
event.preventDefault();
updateDialogVars(...yourConfig);
if(someCondition) {
await router.push(event.target.href);
}
}
return (
<Link href={`/session/${session.id}`} onClick={onClick}>Label</Link>
)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3111 次 |
最近记录: |