传递状态时 Apollo Query 变量错误
Posted
技术标签:
【中文标题】传递状态时 Apollo Query 变量错误【英文标题】:Apollo Query variable error when passing state 【发布时间】:2019-09-16 07:08:33 【问题描述】:试图将我的 sortNew 状态传递给 Apollo 查询中的变量,但得到以下 400 错误:
错误:网络错误:响应不成功:收到状态码 400
更新: 以下是错误详情:
[GraphQL 错误]:消息:“字符串!”类型的变量“$orderBy”用于期望类型“ItemOrderByInput”的位置。,位置:[object Object],[object Object],路径:未定义
这是我正在使用的当前代码,这给了我错误。
试图让 ALL_ITEMS_QUERY 采用 orderBy 变量。我错过了什么吗?
import React, Component from "react";
import Query from "react-apollo";
import gql from "graphql-tag";
import styled from "styled-components";
import Item from "./Item";
import Pagination from "./Pagination";
import perPage from "../config";
import Sort from "./Sort";
const ALL_ITEMS_QUERY = gql`
query ALL_ITEMS_QUERY($skip: Int = 0, $first: Int = $perPage, $orderBy: String!)
items(first: $first, skip: $skip, orderBy: $orderBy)
id
title
price
description
image
largeImage
`;
const Center = styled.div`
text-align: center;
`;
const ItemsList = styled.div`
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 60px;
max-width: $props => props.theme.maxWidth;
margin: 0 auto;
padding-bottom: 80px;
`;
class Items extends Component
state =
sortNew: "createdAt_ASC"
;
render()
return (
<Center>
<Pagination page=this.props.page />
<Sort />
<Query
query=ALL_ITEMS_QUERY
variables=
orderBy: this.state.sortNew,
skip: this.props.page * perPage - perPage
>
( data, error, loading ) =>
if (loading) return <p>Loading...</p>;
if (error) return <p>Error: error.message</p>;
return (
<ItemsList>
data.items.map(item => (
<Item item=item key=item.id />
))
</ItemsList>
);
</Query>
<Pagination page=this.props.page />
</Center>
);
export default Items;
【问题讨论】:
检查网络选项卡,看看服务器的实际响应是什么。通常在验证错误时抛出 400。响应应包括有关问题的详细信息。您可以使用回复更新您的问题。 感谢问题现在更新了详细错误 【参考方案1】:ALL_ITEMS_QUERY 期望 orderBy 是一个像 orderBy: createdAt_ASC
这样的枚举,但你传入的是一个字符串 orderBy: String!
。要解决这个问题,请将枚举名称传递给ALL_ITEMS_QUERY
,这样,您的 orderBy 可以动态更改。
示例如下所示
const ALL_ITEMS_QUERY = gql`
query ALL_ITEMS_QUERY($skip: Int = 0, $first: Int = $perPage, $orderBy: NameOfItemsEnum)
items(first: $first, skip: $skip, orderBy: $orderBy)
id
title
price
description
image
largeImage
`;
NameOfItemsEnum
是后端枚举类型的名称
【讨论】:
以上是关于传递状态时 Apollo Query 变量错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 apollo Query 传递 Apollo 客户端缓存数据
Apollo 客户端没有读取使用 useQuery 钩子传入的变量
记录 apollo-server GraphQL 查询和每个请求的变量
Apollo GraphQL 服务器:在解析器中,从更高级别获取变量