Прошло много времени с тех пор, как этот вопрос был задан, но я надеюсь дать прямой ответ на вопрос «в чем разница между imageSharp и childImageSharp»:
Различается между imageSharp
& childImageSharp
Это всегда один и тот же тип узла, который ImageSharp
. Разница является контрольной точкой.
В типичном блоге gatsby все файлы сначала обрабатываются с gatsby-transformer-file-system
. Каждый файл получит узел с информацией, такой как тип файла, затем плагин, подобный gatsby-transformer-sharp
, подберет узел с соответствующим типом / расширением, затем обработает его и создаст новый узел:
File image.png
|
create a node with
gatsby-transformer-file-system -> "type": "File",
"extension": "png"
|
whenever see a node
with a valid image extension,
gatsby-transformer-sharp -> create a node with
"type": "ImageSharp"
that contains info of images
processed by `gatsby-plugin-sharp`
Всякий раз, когда это происходит, между исходным узлом File
и узлом ImageSharp
создается родительско-дочернее отношение. Дочерний узел ImageSharp
будет запрашиваться на узле File
с именем childImageSharp
.
File ImageSharp
|--id: 1 |--id: 2
|--children |--parent
| `--[ id: 2 ] | `--id: 1
`--childImageSharp |--fluid
|--id: 2 ...
|--fluid
...
Это означает, что вы можете запросить один и тот же узел ImageSharp
как минимум двумя способами:
1. Из файлового узла
ImageSharp
узел не содержит никакой информации о его местонахождении в файловой системе, поэтому, если вы хотите получить изображение из папки src/X
, вам нужно запросить его следующим образом:
query {
// relativePath is relative to the folder set in `gatsby-transformer-file-system`
file ( relativePath: { eq: "src/X"} ) {
childImageSharp {
id
fluid {
src
}
}
}
}
2.Сразу получите ImageSharp
Возможно, каким-то образом вы знаете точный id
узла ImageSharp. Вы можете получить его по:
{
imageSharp (id: {eq: "2"}) { // not a real id
id
fluid {
src
}
}
}
Вы также можете запросить несколько изображений из allFile
или allImageSharp
.
Это вернется с ошибкой:
// error
{
childImageSharp {
id
}
}
Другие плагины также имеют такие же отношения. Вы также можете найти узел childMardownRemark
типа File
, который разрешается в узел MarkdownRemark
.
Это не имеет ничего общего с gatsby-image
- это просто другой способ разрешения для одного и того же узла.