reactjs - 使用onClick到router.push,在Next.js中获取数据和更新页面
问题描述
我是反应并尝试执行 GraphQL 查询的新手,data
根据用户单击的链接在页面上更新(检查onClick
下面代码中的两个 s)。
当用户点击一个链接时handleSubmit
,还应该通过router.push
(更新后的 URL 应该看起来像:)更新 URL http://localhost:3000/bonustype?=value
,而不需要任何页面刷新。但是,当我尝试使用时router.push
,出现以下错误:
服务器错误错误:未找到路由器实例。您应该只在应用程序的客户端内使用“next/router”。
单击链接并更新 URL 后,GraphQL 查询应该使用更新的 slug 再次“执行”(使用来自链接的值)。
坚持了几个小时,感谢任何帮助或输入。代码来自我的主索引页面,运行时的当前 url 是localhost:3000/
.
你会如何解决这个问题?
import { useState } from "react";
import { useRouter } from "next/router";
import Layout from "../components/Layout";
import Head from "next/head";
import Featured from "../components/index/Featured";
import { API_URL } from "@/config/index";
import {
ApolloClient,
inMemoryCache,
gql,
InMemoryCache,
} from "@apollo/client";
export default function HomePage({ casinos }) {
const router = useRouter();
const handleSubmit = (value) => {
console.log(value);
router.push(`/bonustype?term=${value}`);
};
return (
<div>
<Layout>
<div>
<div className={featured.featuredMenu}>
<ul>
<li>
<a href="#" value="Swish" onClick={handleSubmit()} className={featured.active}>
<Star className={featured.menuIcon} />
<div>Highest User Rating</div>
</a>
</li>
<li>
<a href="#" value="Swish" onClick={handleSubmit()}>
<TabletAndroid className={featured.menuIcon} />
<div>Casinos with Swish</div>
</a>
</li>
</ul>
</div>
{casinos.map((casino) => (
<Featured key={casino.id} casino={casino} />
))}
</div>
</Layout>
</div>
);
}
export async function getServerSideProps(context) {
const slug = "Visa";
console.log(slug);
const client = new ApolloClient({
uri: "http://localhost:1337/graphql",
cache: new InMemoryCache(),
});
const { data } = await client.query({
query: gql`
query Casinos($slug: String) {
casinos(where: { deposit_methods: { name: $slug } }) {
slug
name
logo {
url
}
rating
owner
founded
bonuses {
name
slug
title
cashable
bonus_type {
name
}
}
deposit_methods {
name
logo {
url
}
}
}
}
`,
variables: {
slug,
},
});
return {
props: {
casinos: data.casinos,
},
};
}
解决方案
这是错误的
onClick={handleSubmit()}
这是对的
onClick={() => handleSubmit(`Swiss`)}
// you need to supply the parameter to handleSubmit for each different call made
THEN CHANGE handleSubmit to below
const handleSubmit = (value) => {
console.log(value);
router.push(`/bonustype?term=${value}`);
};
推荐阅读
- iis - 来自不同端口的 IIS 反向代理规则
- python - 在 Python 单元测试中正确检查 MagicMock 对象
- database-performance - Postgresql 设置查询优化参数
- python - 将 Python 列表转换为 networkx 图
- angular - Angular 6 - 使用 *ngFor 显示数据的问题(数据未显示)
- java - 在Java中,“”和“\\s”有什么区别?
- tfs - 在 TFS 构建中增加变量值 +1
- php - select * from apply_jobs where appid like '%RAD-0001%' and job_id IN ('41,48,49') order by id asc
- node.js - (Node.JS Jimp) 如何使文本居中?
- dynamics-crm - 美元 - MS CRM - 新的 CRM 页面不工作