我有以下查询:
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”未提供。,位置:[对象对象],路径:未定义
任何反馈将不胜感激。谢谢!
答案 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>