【问题标题】:How can I get the field value from GraphQL query?如何从 GraphQL 查询中获取字段值?
【发布时间】: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.loadingtruedata.eventList 预计是未定义的。
  • 太棒了!!!!!!非常感谢大家。!!!!!!

标签: mongodb reactjs graphql


【解决方案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);
    ...

【讨论】:

    猜你喜欢
    • 2020-05-29
    • 2021-10-03
    • 2014-12-03
    • 2017-04-02
    • 1970-01-01
    • 2020-01-07
    • 2018-02-07
    • 2021-07-27
    • 1970-01-01
    相关资源
    最近更新 更多