创建了一个与此example类似的Apollo查询,但不断出现此错误:Variable "$id" of required type "ID!" was not provided.
我的模式:
type RootQuery {
person(_id: ID!): Person!
}
和解析器:
person: async args => {
const person = await Person.findById(args._id);
return {
_id: person._id,
name: person.name,
location: person.location,
address: person.address,
};
}
在localhost:3000/graphql
中正常运行
我正在传递一个ID并取回数据。
但是,它在客户端不起作用,错误提示未提供ID。
查询
const GET_PERSON_QUERY = gql`
query person($id: ID!) {
person(_id: $id) {
_id
name
location
address
}
}
`;
查询组件
export const GetPerson = ({ _id }) => {
console.log("id: ", _id);
return (
<Query query={GET_PERSON_QUERY} variables={{ _id }}>
{({ loading, error, data }) => {
if (error) return <div>Error loading posts</div>;
if (loading) return <div>Loading...</div>
);
return (
<ul>
<li>{data.person.name}</li>
</ul>
);
}}
</Query>
);
};
例如,将此变量const _id = "abcabc"
传递给组件
<GetPerson _id={_id}
/>导致错误。
答案 0 :(得分:1)
如错误所示,id
是必需变量,但您没有传递它。这是您的代码,它使用属性速记语法:
<Query query={GET_PERSON_QUERY} variables={{ _id }}>
这等效于:
<Query query={GET_PERSON_QUERY} variables={{ _id: _id }}>
因此,您要提供一个名为_id
而不是id
的变量。将变量prop更改为:
<Query query={GET_PERSON_QUERY} variables={{ id: _id }}>