是否可以像 apolloclient 那样在反应查询中模拟 GaphQL 请求中的模式字段?
Is it possible to mock schema fields in GaphQL request in react-query like apolloclient does it?
我正在努力将我的应用程序迁移到来自 apolloclient 的 react-query。使用 apolloclient,我正在模拟显示的模式 here。这是它的样子:
const users = [
{
name: "user1name",
image: "https://user1image.jpg",
},
{
name: "user2name",
image: "https://user2image.jpg",
},
{
name: "user3name",
image: "https://user3image.jpg",
},
{
name: "user4name",
image: "https://user4image.jpg",
},
];
const cache = new InMemoryCache({
typePolicies: {
Post: {
fields: {
user: {
read() {
return user[Math.floor(Math.random() * people.length)];
},
},
},
},
},
});
然后,在查询帖子时,我可以在用户字段后添加 @client
,它将 运行 上面指定的 read
函数和 return该字段的值,而其他字段将具有来自后端的数据。
我无法找到有关如何使用 react-query 执行类似操作的任何信息。有可能吗?
react-query 不是 graphql 特定的库,因此它无法处理任何与模式相关的事情。 react-query 基本上想要从 queryFn
返回一个已解决或被拒绝的 Promise - 就是这样。
所以这个问题可能与您实际使用的库有关,比如 graphql-request or maybe urql-core?
您始终可以做的是在 queryFn
中获取数据后但在从 useQuery
返回之前修改数据。如果你看一下 graphql basic example from the docs,你可以这样做:
useQuery("posts", async () => {
const {
posts: { data },
} = await request(
endpoint,
gql`
query {
posts {
data {
id
title
}
}
}
`
);
return {
...data,
someOtherField: myMockedOtherFieldData };
}
});
我正在努力将我的应用程序迁移到来自 apolloclient 的 react-query。使用 apolloclient,我正在模拟显示的模式 here。这是它的样子:
const users = [
{
name: "user1name",
image: "https://user1image.jpg",
},
{
name: "user2name",
image: "https://user2image.jpg",
},
{
name: "user3name",
image: "https://user3image.jpg",
},
{
name: "user4name",
image: "https://user4image.jpg",
},
];
const cache = new InMemoryCache({
typePolicies: {
Post: {
fields: {
user: {
read() {
return user[Math.floor(Math.random() * people.length)];
},
},
},
},
},
});
然后,在查询帖子时,我可以在用户字段后添加 @client
,它将 运行 上面指定的 read
函数和 return该字段的值,而其他字段将具有来自后端的数据。
我无法找到有关如何使用 react-query 执行类似操作的任何信息。有可能吗?
react-query 不是 graphql 特定的库,因此它无法处理任何与模式相关的事情。 react-query 基本上想要从 queryFn
返回一个已解决或被拒绝的 Promise - 就是这样。
所以这个问题可能与您实际使用的库有关,比如 graphql-request or maybe urql-core?
您始终可以做的是在 queryFn
中获取数据后但在从 useQuery
返回之前修改数据。如果你看一下 graphql basic example from the docs,你可以这样做:
useQuery("posts", async () => {
const {
posts: { data },
} = await request(
endpoint,
gql`
query {
posts {
data {
id
title
}
}
}
`
);
return {
...data,
someOtherField: myMockedOtherFieldData };
}
});