14
const GET_DOGS = gql`
  {
    dogs {
      id
      breed
    }
  }
`;

I found this new syntax from here.

Can you explain this syntax? Where can I find detail about it?

Luca Kiebel
  • 8,292
  • 5
  • 24
  • 37
Nicolas S.Xu
  • 10,813
  • 27
  • 63
  • 112

2 Answers2

13

It's called a tagged template. Template literals (`...`) can be prefixed with a function name. Upon evaluation, this function will be called and the static and dynamic parts of the template literal are passed to the function. Example:

function foo(staticParts, dynamicParts) {
  console.log(staticParts, dynamicParts);
}

foo`this is a ${42} test`

Tagged templates can be used to create domain specific languages, such as in this example.

There are many questions around tagged templates you can learn more from.

Felix Kling
  • 705,106
  • 160
  • 1,004
  • 1,072
2

It's called a template literal.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

Not only does it allow you to do multi-line formatting like your example above, but it also makes it easier to mix expressions in with string content.

isherwood
  • 46,000
  • 15
  • 100
  • 132
kshetline
  • 8,496
  • 4
  • 19
  • 44