我想为我的项目创建一个数据文件,而不是将所有内容都放在一个文件中,但是我正在使用 React hooks 来加载图像。当我想将所有内容都放在单独的文件中时,这就成为一个问题。该代码给了我“无效的钩子(Hook)调用”消息,我明白为什么它是错误的,但不知道如何让它为我工作。
EventData.js
import React from "react"
import Image from "gatsby-image"
import { graphql, useStaticQuery } from "gatsby"
const getImages = graphql`
{
btu: file(relativePath: { eq: "eventImage/btu.jpeg" }) {
childImageSharp {
fixed(height: 120, width: 500) {
...GatsbyImageSharpFixed_withWebp_tracedSVG
}
}
}
}
`
const data = useStaticQuery(getImages)
export const details = [
{
id: 1,
img: <Image fixed={data.btu.childImageSharp.fixed} />,
date: "2 Oct 2020",
distance: "30km - 160km",
name: "Brisbane Trail Ultra",
location: "Brisbane, QLD",
},
]
EventCalendar.js
const EventCalendar = () => {
return (
<Layout>
<section>
{details.map(details => {
return <EventCard key={details.id} {...details}></EventCard>
})}
</section>
</Layout>
)
}
最佳答案
您必须定义一个自定义 Hook ,在您的情况下它看起来像这样:
import React from "react"
import Image from "gatsby-image"
import { graphql, useStaticQuery } from "gatsby"
const getImages = graphql`
{
btu: file(relativePath: { eq: "eventImage/btu.jpeg" }) {
childImageSharp {
fixed(height: 120, width: 500) {
...GatsbyImageSharpFixed_withWebp_tracedSVG
}
}
}
}
`;
export function useDetails() {
const data = useStaticQuery(getImages);
return [
{
id: 1,
img: <Image fixed={data.btu.childImageSharp.fixed} />,
date: "2 Oct 2020",
distance: "30km - 160km",
name: "Brisbane Trail Ultra",
location: "Brisbane, QLD",
},
];
}
要定义自定义 Hook ,请定义一个函数,该函数返回您想要的值。在此函数中,您可以使用 React API 中的所有可用钩子(Hook)。
然后在你的主文件中写入
const EventCalendar = () => {
const details = useDetails();
return (
<Layout>
<section>
{details.map(detail => {
return <EventCard key={details.id} {...detail}></EventCard>
})}
</section>
</Layout>
)
}
关于javascript - 在组件的单独文件中使用 React hook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64236912/