【发布时间】:2020-06-29 21:49:37
【问题描述】:
盖茨比/反应菜鸟在这里。
我在 Contentful 中创建了一个名为 Topic 的内容类型。每个主题都包含一个标题、描述和主题页面的 slug。目前,我能够将每个主题呈现为页面上的卡片。我现在想弄清楚的是如何一次只渲染一张卡片,并在点击旋转按钮时让卡片内容(标题/描述)随机变化。
我创建了这个快速demo 以直观地展示我的目标。
这里是我渲染每个主题卡的地方:
import React from 'react'
import { graphql, navigate, StaticQuery } from 'gatsby'
import './topicFeed.scss'
export default () => (
<StaticQuery
query={graphql`
query TopicFeed {
allContentfulTopic(filter: {featured: {eq: true}}) {
edges {
node {
cardDescription {
cardDescription
}
cardTitle
id
slug
}
}
}
}
`}
render={data => (
<div>
<div className='feed'>
{data.allContentfulTopic.edges.map(edge => (
<div key={edge.node.id} className='topic__item'>
<h2 className='card__title'>{edge.node.cardTitle}</h2>
<div className="card__desc--container">
<p className='card__desc'>{edge.node.cardDescription.cardDescription}</p>
</div>
<div className='card__link' onClick={() => navigate(`/topic/${edge.node.slug}`)}>
<p>Learn More</p>
</div>
</div>
))}
</div>
<button onClick={() =>console.log('werked')}onClick={() =>console.log('werked')}>SPIN</button>
</div>
)}
/>
)
据我了解,gatsby 会在构建时为每张卡片呈现 div,因此我对用户如何在点击时操作这些数据感到困惑。
【问题讨论】:
-
Gatsby 不需要预先“构建”所有不同的卡片,它只会为页面路由创建静态标记,没有什么可以阻止您一次显示一张卡片并拥有它在点击时随机化。您的页面已经获取了完整的数据列表,但您正在使用
.map()来呈现数组中的所有卡片。您可能只想按数组索引抓取一张卡片,您可以根据数组长度使用Math.random()选择它。
标签: reactjs gatsby contentful headless-cms jamstack