Unlock seamless workflows and faster delivery with our latest releases – get the details

Issue with fetching the name of a referenced tag in a recipe array in React.

5 replies
Last updated: Feb 24, 2021
Ok, this one is complicated. In the content I have "Recipe" with an array of "fresh" ingredients (objects) where the name is a reference to a "Tag" (called: ingredienttag). When I fetch the recipes in React, like:sanityClient
.fetch(

*[_type == "recipe"]{
       _id,
       title,
       slug,
       "dish": dish->{_id, name},
       fresh,
       stock,
       directions,
       "related": related[]->{title},
       "book": book->{_id, name, author},
       info,
       "tag": tag[]->{_id, name, category->{_id, name}},
      }
)
it returns the complete fresh array including <quantity, unit, ingredienttag: {_ref: "5f3bdac9e6490b05c8ba48ae", _type: "reference"}>.
Obviously I want to return the name of the referenced "tag", instead of _ref.
So instead of <fresh,> I do < "fresh": fresh[]->{quantity, unit, ingredienttag->{name}},> but it just returns an array of empty objects.
What can be wrong here? (all the rest is working as expected)
Feb 24, 2021, 12:03 PM
Hi Pieter. It looks like the
fresh[]
array doesn't contain any references, but a direct application of ingredienttag. If that's how you want it to be, you could try removing the dereferencing operator (
->
) after
fresh[]
to see if that works.
Feb 24, 2021, 2:13 PM
Thanks, but please read carefully. I did "fresh": fresh[]->{quantity, unit, ingredienttag->{name}}, as I mentioned before, but it just returns an array of empty objects. These are the 3 different results:fetch1 = fresh,
console1 = fresh: 0
:ingredienttag: {_ref: "5f3bdac9e6490b05c8ba48ae", _type: "reference"}fetch2 = "fresh": fresh[]->,
console2 = fresh: Array(2) 0: null 1: null
fetch3 ="fresh": fresh[]->{ingredient, quantity, unit, ingredienttag->{name}},
console3 = fresh: Array(2) 0: {} 1: {}
Nothing works to get the name of "ingredienttag".
Feb 24, 2021, 2:42 PM
I am getting the same problem following the "Minimal Example" at Sanity. I want to fetch an array of crewMembers, with their jobs and names together. I tried: "crewMembers": crewMembers[]->{job, person->name}, but this does not work. What is the correct query?
Feb 24, 2021, 3:11 PM
Thanks, but please read carefully. I did “fresh”: fresh[]->{quantity, unit, ingredienttag->{name}}, as I mentioned before
Please accept my apologies, Pieter. What I haven’t yet seen you try in those three examples is removing the dereferencing operator,
->
, after
fresh[]
(in your first fetch example it’s removed, but only after
fresh
). Since
fresh[]
is an array of type
ingredienttag
and not an array of references, I don’t expect you’d want to include it.
I created a prototype of your schema and this worked for me:


*[_type == "recipe"] {
  _id,
  title,
  slug,
  "fresh": fresh[] {
    quantity,
    unit,
    ingredienttag->{name}
  }
}
Feb 24, 2021, 3:12 PM
Hey Geoff, 1000x thanks! You saved my day.
Feb 24, 2021, 3:48 PM

Sanity– build remarkable experiences at scale

Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.

Was this answer helpful?