如何从 GraphQL 查询中获取字段值?
Posted
技术标签:
【中文标题】如何从 GraphQL 查询中获取字段值?【英文标题】:How can I get the field value from GraphQL query? 【发布时间】:2018-08-04 21:51:26 【问题描述】:我有从 MongoDB 集合中查询值的 Apollo 客户端,然后我尝试从“findOne”中获取值。当我尝试获取值时(例如“eventname”,它会提醒“无法读取未定义的属性'eventname'”。
这是架构和解析器。
type Event
_id: ID!
eventname: String!
remark: String
username: String
createdAt: Date
updatedAt: Date
registers: [Register]
type Query
eventList(_id: ID): Event
eventList: async(parents, args, Event ) =>
const eventList = Event.findOne( _id: args._id );
if (!eventList)
throw new Error('No such event found');
return eventList;
,
来自客户端的查询:
class RegistersIndex extends Component
render()
const data: loading, error, eventList, match = this.props;
console.log(eventList.eventname);
...
...
export const eventsListQuery = gql`
query EventsListQuery ($eventid: ID!)
eventList (_id: $eventid)
_id
eventname
remark
username
createdAt
updatedAt
`;
export default graphql(eventsListQuery,
options: (props) => (
variables: eventid: props.match.params._eventid ,
)
)(RegistersIndex);
【问题讨论】:
你测试过 ``` console.log(data.eventList.eventname); ``` ? 请发布您的 GraphQL 端点配置 also.. 而data.loading
是true
,data.eventList
预计是未定义的。
太棒了!!!!!!非常感谢大家。!!!!!!
【参考方案1】:
这可能是因为在获取数据时eventList
将是undefined
。添加一个条件来检查loading
是否为true
,这样eventList
字段只有在加载完成后才能访问。
render()
const data: loading, error, eventList, match = this.props;
if (loading) return <div>Loading...</div>
console.log(eventList.eventname);
...
【讨论】:
以上是关于如何从 GraphQL 查询中获取字段值?的主要内容,如果未能解决你的问题,请参考以下文章
在构建 Java GraphQL API 时,如何避免从数据库中过度获取(即仅获取查询中指定的字段)?
有没有办法将 GraphQL 查询字段分组到子/嵌套查询组中?