Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#76 4 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
5/5
Tempo stimato
Più di una settimana
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Da chiarire
Stato di attività
Tranquilla
Stack tecnologico
ruby
Ambito
api

Direzione di ricerca

Inizia da lib/graphql/client/schema/object_type.rb, nel controllo di method_missing che solleva ImplicitlyFetchedFieldError, quindi leggi lib/graphql/client/response.rb e l’esempio di frammento graphlient collegato. Definisci in che modo un frammento a livello di query debba differire da un frammento di componente figlio; il lavoro è completato quando i campi selezionati tramite quel frammento possono essere accessibili direttamente senza l’errore di recupero implicito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Ruby
Stelle
78
Fork
228
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di github-community-projects/graphql-client

Tutte le issue di github-community-projects/graphql-client

Issue simili

Altre issue su Ruby

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.