反应常量中的目标片段
Target fragment within react const
我正在构建我的第一个 React 站点,使用带有 prismic.io 的 gatsby 作为我的新闻部分的 CMS。
在 prismic 中,我在每个新闻报道中使用切片作为引用和特色图片,并希望尝试将这些数据拉入我的页面,但是我不确定如何定位我创建的特定片段名称在为每个设置的相关 const
中。
GraphQL 查询
export const query = graphql`
query ($slug:String){
prismicNewsStory (uid:{eq: $slug}) {
data {
body {
__typename
... on PrismicNewsStoryBodyQuote {
primary {
quote {
text
}
}
}
... on PrismicNewsStoryBodyFeaturedImage {
primary {
featured_image {
url
}
}
}
}
}
}
}
`
目标常量
const quote = props.data.prismicNewsStory.data.body[0].primary.quote.text
const featured_image = props.data.prismicNewsStory.data.body[1].primary.featured_image.url
由于切片在 prismic 中是可选的,我在一些新闻报道中遇到了一些问题,当在 [=14= 之前添加 featured_image
时,它们会在 [=15= 中交换顺序].
问题
每个 const
中是否有一种方法可以定位特定的片段,或者我有更好的方法来做到这一点吗?
//get the array
const body = props.data.prismicNewsStory.data.body;
const {feature_image : fi0, quote: q0} = body[0].primary;
// above line is equivalent to:
// const fi0 = body[0].primary.feature_image;
// const q0 = body[0].primary.quote;
// when order is reversed q0 will be undefined
const {feature_image : fi = fi0, quote : q = q0} = body[1].primary;
// above line is equivalent to:
// const fi = body[1].primary.feature_image || fi0;
// const q = body[1].primary.quote || q0;
// when order is reversed fi0 will be assigned to fi
const feature_image = fi.url;
const quote = q.text
或使用 reduce
const reduceStory = (acc, item) => ({
feature_image: acc.feature_image|| item.primary.feature_image,
quote: acc.quote || item.primary.quote
})
const story = props.data.prismicNewsStory.data.body.reduce(reduceStory, {});
const feature_image = story.feature_image.url;
const quote = story.quote.text
>
在与@paul-mcbride 一起查看和学习更多知识后,我们想出了以下针对任何 __typename
的解决方案。
const body = props.data.prismicNewsStory.data.body.reduce((object, item) => ({
...object,
[item.__typename]: item.primary
}), {});
您现在可以使用目标切片名称。
<FeaturedImage src={body.PrismicNewsStoryBodyFeaturedImage.featured_image.url} />
或
<QuoteText>{body.PrismicNewsStoryBodyQuote.quote.text}</QuoteText>
我正在构建我的第一个 React 站点,使用带有 prismic.io 的 gatsby 作为我的新闻部分的 CMS。
在 prismic 中,我在每个新闻报道中使用切片作为引用和特色图片,并希望尝试将这些数据拉入我的页面,但是我不确定如何定位我创建的特定片段名称在为每个设置的相关 const
中。
GraphQL 查询
export const query = graphql`
query ($slug:String){
prismicNewsStory (uid:{eq: $slug}) {
data {
body {
__typename
... on PrismicNewsStoryBodyQuote {
primary {
quote {
text
}
}
}
... on PrismicNewsStoryBodyFeaturedImage {
primary {
featured_image {
url
}
}
}
}
}
}
}
`
目标常量
const quote = props.data.prismicNewsStory.data.body[0].primary.quote.text
const featured_image = props.data.prismicNewsStory.data.body[1].primary.featured_image.url
由于切片在 prismic 中是可选的,我在一些新闻报道中遇到了一些问题,当在 [=14= 之前添加 featured_image
时,它们会在 [=15= 中交换顺序].
问题
每个 const
中是否有一种方法可以定位特定的片段,或者我有更好的方法来做到这一点吗?
//get the array
const body = props.data.prismicNewsStory.data.body;
const {feature_image : fi0, quote: q0} = body[0].primary;
// above line is equivalent to:
// const fi0 = body[0].primary.feature_image;
// const q0 = body[0].primary.quote;
// when order is reversed q0 will be undefined
const {feature_image : fi = fi0, quote : q = q0} = body[1].primary;
// above line is equivalent to:
// const fi = body[1].primary.feature_image || fi0;
// const q = body[1].primary.quote || q0;
// when order is reversed fi0 will be assigned to fi
const feature_image = fi.url;
const quote = q.text
或使用 reduce
const reduceStory = (acc, item) => ({
feature_image: acc.feature_image|| item.primary.feature_image,
quote: acc.quote || item.primary.quote
})
const story = props.data.prismicNewsStory.data.body.reduce(reduceStory, {});
const feature_image = story.feature_image.url;
const quote = story.quote.text
>
在与@paul-mcbride 一起查看和学习更多知识后,我们想出了以下针对任何 __typename
的解决方案。
const body = props.data.prismicNewsStory.data.body.reduce((object, item) => ({
...object,
[item.__typename]: item.primary
}), {});
您现在可以使用目标切片名称。
<FeaturedImage src={body.PrismicNewsStoryBodyFeaturedImage.featured_image.url} />
或
<QuoteText>{body.PrismicNewsStoryBodyQuote.quote.text}</QuoteText>