[GraphQL错误]:消息:所需类型为“ MongoID!”的变量“ $ id”没有提供

时间:2019-01-03 06:03:59

标签: reactjs mongodb graphql react-apollo apollo-boost

我有以下查询:

import { gql } from 'apollo-boost';
const GetUserInfo = gql`
query getUserInfo($id: MongoID!){
    userById(_id: $id){
      local{
        username
...
    }
  }
`;

export  {GetUserInfo} ;

然后将查询绑定到我的“ React.Component”

import React from "react";
...
import { GetUserInfo } from "../../queries/queries";
import { graphql } from 'react-apollo';



class Dashboard extends React.Component {
  constructor(props) {
    super(props);
...

Dashboard.propTypes = {};



export default graphql(GetUserInfo, {
  options: (props) => {
    return {

          variables: {
              _id: props.ID
      }
    }
  }
})(Dashboard);

我确定props.ID等同于MongoDB ID。我还可以确定正在读取父组件中的道具。

上面的代码导致以下错误:

[GraphQL错误]:消息:所需类型为“ MongoID!”的变量“ $ id”未提供。,位置:[对象对象],路径:未定义

console error

任何反馈将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

查询中使用的变量为_id;需要使用在选项中传递的此变量来执行查询。

当前传递了export default graphql(GetUserInfo, { options: (props) => { return { variables: { id: props.ID } } } })(Dashboard); 的值,这是一个从未在查询中使用的变量。

您可以使两个变量具有相同的名称。

    <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/collapsing_toolbar_appbarlayout"
    android:layout_width="match_parent"
    android:layout_height="208dp"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:titleEnabled="false">

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:layout_gravity="bottom"
            android:layout_marginTop="160dp"
            android:background="#0000ff"
            app:layout_collapseMode="none"
            app:tabGravity="fill"
            app:tabIndicatorColor="#ffffff"
            app:tabIndicatorHeight="4dp"
            app:tabMode="fixed" />

        <LinearLayout
            android:id="@+id/title_container1"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_marginTop="104dp"
            android:orientation="vertical"
            app:layout_collapseMode="none">

            <android.support.v7.widget.AppCompatTextView
                android:layout_width="match_parent"
                android:layout_height="48dp"
                android:background="#00ff00"
                android:gravity="center"
                android:text="test"
                android:textColor="#000000" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/title_container"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_marginTop="56dp"
            android:orientation="vertical"
            app:layout_collapseMode="pin">

            <android.support.v7.widget.AppCompatTextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#ff0000"
                android:gravity="center"
                android:text="test"
                android:textColor="#000000" />
        </LinearLayout>

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:background="@color/colorPrimary"
            app:contentInsetLeft="0dp"
            app:contentInsetStart="0dp"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:titleTextColor="#ffffff" />
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v7.widget.RecyclerView
    android:id="@+id/collapsing_toolbar_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/collapsing_toolbar_floating_action_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="19dp"
    android:src="@drawable/calendar"
    app:layout_anchor="@id/collapsing_toolbar_recycler_view"
    app:layout_anchorGravity="bottom|end" />

</android.support.design.widget.CoordinatorLayout>