У меня есть базовый компонент реакции, который должен отображать некоторые динамические данные из моей базы данных graphql через react-apollo. Я пытаюсь передать идентификатор содержимого в свой запрос следующим образом:
export default withApollo(graphql(
gql`
query ($postId: String!){
blogPost (where: { id: $postId }){
title
}
}
`,
{
options: {
variables: {
postId: "cjju54kgfl4r6095353zn6us1"
},
props: ({data}) => ({data})
}
})(Post))
Этот пример дает мне ошибку 400 на сервере
Однако это работает так:
export default withApollo(graphql(
gql`
query {
blogPost (where: { id: "cjju54kgfl4r6095353zn6us1" }){
title
}
}
`,
{
options: {
props: ({data}) => ({data})
}
})(Post))
Я просмотрел всю документацию Apollo и просто не могу понять, что я здесь делаю не так.
Вот весь компонент на случай, если это будет полезно:
import PageLayout from '../layouts/main'
import ContentWrapper from '../layouts/contentWrapper'
import Header from '../components/Header'
import {graphql} from 'react-apollo'
import gql from "graphql-tag";
import withApollo from "../lib/withApollo";
import ErrorMessage from '../components/ErrorMessage'
const headerContent = {
headline: 'Test',
subHeadline: 'Test'
}
function Post({data: {variables, loading, error, blogPost}}) {
if (loading) {
return <div>Loading</div>
}
else if (error) {
return <ErrorMessage message='Error loading posts.'/>
}
else {
return (
<PageLayout>
<Header data = {headerContent}/>
<ContentWrapper>
<h1>{blogPost.title}</h1>
<p>{JSON.stringify(variables)}</p>
</ContentWrapper>
</PageLayout>
)
}
}
export default withApollo(graphql(
gql`
query ($postId: String!){
blogPost (where: { id: $postId }){
title
}
}
`,
{
options: {
variables: {
postId: "cjju54kgfl4r6095353zn6us1"
},
props: ({data}) => ({data})
}
})(Post))
Я действительно застрял в этом, спасибо за помощь!
Логирование data.error выкидывает:
Error: Network error: Response not successful: Received status code 400
at new ApolloError (ApolloError.js:34)
at ObservableQuery.webpackJsonp../node_modules/apollo-client/core/ObservableQuery.js.ObservableQuery.currentResult (ObservableQuery.js:87)
at Query._this.getQueryResult (Query.js:104)
at Query.webpackJsonp../node_modules/react-apollo/Query.js.Query.render (Query.js:206)
at finishClassComponent (react-dom.development.js:13193)
at updateClassComponent (react-dom.development.js:13155)
at beginWork (react-dom.development.js:13824)
at performUnitOfWork (react-dom.development.js:15863)
at workLoop (react-dom.development.js:15902)
at renderRoot (react-dom.development.js:15942)


Я только что разобрался:
$postId: String! должен быть $postId: ID
спасибо за помощь, кажется, я неправильно понял эту базовую концепцию GraphQL.
Я удалил свой предыдущий ответ, так как он бесполезен. Но я склонен думать, что это проблема бэкэнда, обрабатывающего объект переменных, отправленный в запросе. Можете ли вы поделиться телом запроса POST, отправленным на сервер?