javascript - 在组件的单​​独文件中使用 React hook

标签 javascript reactjs react-hooks

我想为我的项目创建一个数据文件,而不是将所有内容都放在一个文件中,但是我正在使用 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/

相关文章:

javascript - 无法通过 Flask-socketIO 服务器在 HTML 客户端中显示来自 Python 客户端的视频流

javascript - 为什么回调函数中的react state(array)为空?为什么它不使用外部范围的更新值?

javascript - 如何使用 React hook 的 useState 存储具有嵌套对象作为属性的对象数组?

javascript - 将小数延迟传递给 setInterval 或 setTimeout 是否安全?

javascript - 如何使幻灯片自动播放并更改交换以在 JavaScript 中淡入淡出

javascript - 如何为事件回调传递特定数组元素

javascript - Redux - 可以进行不影响状态的操作吗

reactjs - 在同一个存储库中的 github 页面前端和后端上部署 React 应用程序

javascript - 扩展运算符来更新对象数组

javascript - React Hook "useEffect"在函数 "shoes"中调用,该函数既不是 React 函数组件,也不是自定义 React Hook