Apollo-link-rest: Problem mit neuem {args.id}-Stil

Erstellt am 16. Juli 2018  ·  5Kommentare  ·  Quelle: apollographql/apollo-link-rest

Hi,

Habe gerade die Bibliothek aktualisiert und habe Probleme beim Upgrade. Ohne Änderungen funktioniert die Funktionalität wie erwartet mit einer Warnung, auf den neuen Stil zu migrieren. Wenn ich die erforderlichen Änderungen wie unten vornehme, erhalte ich, dass sowohl {args} als auch {args.name} undefiniert sind. Hier ist der Code:

const restLink = new RestLink({
  uri: 'https://avoindata.prh.fi/bis/v1',
  typePatcher: {
    BusinessPayload: data => ({
      ...data,
      results: data.results.map(business => ({
        __typename: 'Business',
        ...business
      }))
    })
  }
});

const client = new ApolloClient({
  link: restLink,
  cache: new InMemoryCache()
});

const query = gql`
  query($name: String!) {
    companies(name: $name)
      @rest(
        type: "BusinessPayload"
        path: "?totalResults=false&maxResults=10&resultsFrom=0&name={args.name}"
      ) {
      results {
        name
        businessId
      }
    }
  }
`;

// And then call the query:
client.query({ query, variables: { name: value } });

Vermisse ich etwas?

blocking bug 🐛 has-reproduction

Hilfreichster Kommentar

In v0.4.1 behoben: https://github.com/apollographql/apollo-link-rest/releases/tag/v0.4.1 Bitte lass es mich wissen, wenn du es noch siehst!

Alle 5 Kommentare

Gleicher Fehler. Wurde gerade mit dem neuen {args.id}-Stil undefiniert.

Großartiger Fang @karensg @haipengz -- Dies ist eine Schlüsselpriorität für mich, aber ich wurde gestern unterbrochen, bevor ich diese Änderungen vollständig testen konnte.

@karensg Während Ihre Syntax funktionieren sollte (und es ist ein Fehler, der nicht funktioniert), wollte ich die API etwas anders verwenden.
Statt: path: "?totalResults=false&maxResults=10&resultsFrom=0&name={args.name}"
Ich wollte es sein: path: "?totalResults=false&maxResults=10&resultsFrom=0&{args}"

{args} oder {args.query.deeper} nimmt das Objekt, auf das der Schlüsselpfad zeigt, und wandelt es dann in eine Abfragezeichenfolge um. &{args} in Ihrer Situation wäre also { name: "foo" } wird zu &name=foo wo foo automatisch encodeURIComponent aufgerufen wird.

Ich betrachte dies als meine zweite unmittelbare oberste Priorität, aber ich kämpfe bei der Arbeit gegen Brände, also komme ich erst am Nachmittag dazu. Im Allgemeinen bin ich für jede Hilfe dankbar, die Sie mir geben können. Sie finden mich im ApolloGraphQL-Slack im #apollo-link-Ruheraum.

Eine Sache, die wirklich nützlich wäre / meine Lösung beschleunigen würde, wäre ein Code für Komponententests für jeden Fall, den Sie verwenden, damit ich sicherstellen kann, dass es für Sie in Zukunft funktioniert.

In v0.4.1 behoben: https://github.com/apollographql/apollo-link-rest/releases/tag/v0.4.1 Bitte lass es mich wissen, wenn du es noch siehst!

@fbartho Danke für die Korrekturen! Es funktioniert jetzt für meinen Anwendungsfall.

Danke noch einmal!
Nach dem Upgrade auf v0.4.1 funktioniert der neue {args.id}-Stil jetzt für meinen Fall, wurde nicht mehr undefiniert.

...
const GET_DOG_IMAGES_BY_BREED = gql`
  query breeds ($breed: String!) {
    imagesByBreed(breed: $breed) @rest(
      type: "imagesByBreedResult"
      path: "breed/{args.breed}/images"
      endpoint: "dogApi"
    ) {
      status
      message
    }
  }
`

...
<Query query={GET_DOG_IMAGES_BY_BREED}
    notifyOnNetworkStatusChange
    variables={{ breed: 'hound' }}
 >
  {({ refetch, error, data, networkStatus, }) => {
    expect(error).toBeUndefined()
    expect(data).toBeDefined()
  }}
</Query>
...

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen