Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Would it be possible to use Fragments just for pure re-usability? (without forced parent-child component encapsulation)

Offen
#76 4 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Anfängerfreundlichkeit
35/100
Issue-Typ
Feature
Klarheit
Muss geklärt werden
Aktivitätsstatus
Ruhig
Tech-Stack
ruby
Bereich
api

Rechercherichtung

Beginne mit lib/graphql/client/schema/object_type.rb bei der method_missing-Prüfung, die ImplicitlyFetchedFieldError auslöst, und lies anschließend lib/graphql/client/response.rb sowie das verlinkte graphlient-Fragmentbeispiel. Lege fest, wie sich ein Fragment auf Abfrageebene von einem Fragment einer untergeordneten Komponente unterscheiden soll; abgeschlossen ist die Arbeit, wenn Felder, die über dieses Fragment ausgewählt wurden, direkt abgerufen werden können, ohne dass der implizite Abruffehler auftritt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

In regards to the ImplicitlyFetchedFieldError, that is raised in GraphQL::Client::Schema::ObjectType, on method_missing...

              if @data.key?(field.name)
                raise ImplicitlyFetchedFieldError

Would it be possible to have the option to use fragments just for re-usability?

For example, in the Apollo documentation on fragments, it states that

Image

the main reason for fragments to exist is re-usability. It certainly emphasizes that it is specially useful when collocating with components, but it does NOT say that this is the only usage that we should be able to make out of it.

In the documentation (see collocated fragments), somehow states that there are two types of fragments, the ones that are "externally" (or collaterally) referred to by a component, and the ones that are defined right on that component (collated):

A colocated fragment is just like any other fragment, except it's defined in the same file as a particular component that uses the fragment's fields.

After you define a fragment in a child component, the parent component can refer to it in its own colocated fragments, like so:

export const FEED_ENTRY_FRAGMENT = gql`
  fragment FeedEntryFragment on FeedEntry {
    commentCount
    repository {
      full_name
      html_url
      owner {
        avatar_url
      }
    }
    ...VoteButtonsFragment
    ...EntryInfoFragment
  }

  ${VOTE_BUTTONS_FRAGMENT}
  ${ENTRY_INFO_FRAGMENT}
  • In this example VOTE_BUTTONS_FRAGMENT and ENTRY_INFO_FRAGMENT are defined in (or imported from) child components.
Image

Apollo's technique to define fragments and identify if they belong to a parent or children classes can arguable, yet they offer a way.


Following the example of graphlient gem, where fragments support was added by making it aligned with graphql-client, in the following query...

module Fragments
  Invoice = client.parse <<~'GRAPHQL'
    fragment on Invoice {
      id
      feeInCents
    }
  GRAPHQL
end

invoice_query = client.parse do
  query do
    invoice(id: 10) do
      id
      ___Fragments__Invoice
    end
  end
end

... we would get the error if trying to access feeInCents directly from the query Response

response = client.execute(invoice_query)
result = response.data.invoice
result.to_h
# {"id" => 10, "feeInCents"=> 20000}
result.id
# 10
result.fee_in_cents
# raises GraphQL::Client::ImplicitlyFetchedFieldError

How would we in graphql-client define a fragment that belongs to the main query (or parent component)?

  invoice_query <<~'GRAPHQL'
    query InvoiceById($some_id: Int) {
      invoice(id: $some_id) {
        id
        ...withFee
      }
    }

    fragment withFee on Invoice {
      id
      feeInCents
    }
  GRAPHQL

provided that we can do something like this:

response = client.execute(invoice_query)
result = response.data.invoice
result.fee_in_cents

without getting the error GraphQL::Client::ImplicitlyFetchedFieldError.

Vorherrschende Sprache
Ruby
Sterne
78
Forks
228
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus github-community-projects/graphql-client

Alle Issues in github-community-projects/graphql-client

Ähnliche Issues

Weitere Issues zu Ruby

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.