Would it be possible to use Fragments just for pure re-usability? (without forced parent-child component encapsulation)
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 35/100
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...
- Here is the line
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
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_FRAGMENTandENTRY_INFO_FRAGMENTare defined in (or imported from) child components.
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
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus github-community-projects/graphql-client
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 45/100
github-community-projects/graphql-client#78 · 1 Kommentar ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
github-community-projects/graphql-client#77 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
github-community-projects/graphql-client#75 · 1 Kommentar · 1 Reaktion ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
github-community-projects/graphql-client#67 · 2 Kommentare ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 30/100
github-community-projects/graphql-client#65 · 1 Kommentar ·
Alle Issues in github-community-projects/graphql-client
Ähnliche Issues
-
security
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
ds-drift
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
we-promise/sure#3934 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 7 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
simp/pupmod-simp-ssh#246 ·