Попытка использовать компонент React Apollo Query для запроса GraphQL с использованием машинописного текста, вызывающего ошибку - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь запросить API GraphQl с помощью Apollo. Я делаю это в React с машинописью и не могу заставить компонент Query перестать выдавать ошибки. Я новичок во всей этой комбинации, поэтому я могу делать что-то явно не так. Есть идеи?

Вот ошибка:

Type '{ children: (string | (({ loading, error, data }: QueryResult<any, OperationVariables>) => any))[]; query: any; }' is not assignable to type 'Pick<Readonly<QueryProps<any, OperationVariables>> & Readonly<{ children?: ReactNode; }>, "children" | "displayName" | "skip" | "onCompleted" | "onError" | "ssr" | "variables" | ... 6 more ... | "partialRefetch">'.
  Types of property 'children' are incompatible.
    Type '(string | (({ loading, error, data }: QueryResult<any, OperationVariables>) => any))[]' is not assignable to type '((result: QueryResult<any, OperationVariables>) => ReactNode) | (((result: QueryResult<any, OperationVariables>) => ReactNode) & string) | (((result: QueryResult<any, OperationVariables>) => ReactNode) & number) | ... 4 more ... | (((result: QueryResult<...>) => ReactNode) & ReactPortal)'.
      Type '(string | (({ loading, error, data }: QueryResult<any, OperationVariables>) => any))[]' is not assignable to type '((result: QueryResult<any, OperationVariables>) => ReactNode) & ReactNodeArray

Вот мой код:

import React from 'react';
import gql from "graphql-tag";
import { Query } from "react-apollo";


export interface LoginProps { 
    data: object; item: string; query: object; loading: string; error: string;
 };

 const getLogin =
    gql`
        {
        viewer {
            login
            }
        }
    `;

export class Test extends React.Component<LoginProps, {}> { 
    <Query query={getLogin}>
            {({ loading, error, data }) => {
                if (loading) return <p>Loading...</p>;
                if (error) return <p>Error!</p>;

                return data.viewer.map( item => {
                    <div key={item.login}>
                        <p>{item.login}</p>
                    </div>
                });
            }};
    </Query>
};

export default Test;

1 Ответ

0 голосов
/ 04 мая 2019

Во-первых, поскольку вы не используете состояние в своем компоненте, я бы порекомендовал вам использовать React.FunctionComponent вместо React.Component.

В отношении вашей проблемы: выдолжны использовать компоненты jsx внутри функции рендеринга компонента, например:

export class Test extends React.Component<LoginProps, {}> {
  // HERE: use the render method
  render() {
    return (
      <Query query={getLogin}>
        {({ loading, error, data }) => {
          if (loading) return <p>Loading...</p>;
          if (error) return <p>Error!</p>;

          return data.viewer.map(item => {
            <div key={item.login}>
              <p>{item.login}</p>
            </div>;
          });
        }}
        ;
      </Query>
    );
  }
}

Надеюсь, это поможет.

...