React,Gatsbyjs:在对象中循环-组件未呈现

菲利普·劳里姆

我在Gatsbyjs项目中具有以下组件:

styleItem.js

import React from 'react'
import styled from 'styled-components'
import BackgroundImage from 'gatsby-background-image'
import {StaticQuery, graphql } from "gatsby"
import {Col } from 'react-bootstrap'

import '../styles/styles.css'

const StyleItem = (props) => {
    return (
        <StaticQuery 
            query={graphql`
                query {
                    street: file(relativePath: { eq: "2.jpg" }) {
                        childImageSharp {
                        fluid(quality: 90, maxWidth: 1920) {
                            ...GatsbyImageSharpFluid_withWebp
                            }
                        }
                    }
                    casual: file(relativePath: { eq: "3.jpg" }) {
                        childImageSharp {
                        fluid(quality: 90, maxWidth: 1920) {
                            ...GatsbyImageSharpFluid_withWebp
                            }
                        }
                    }
                    athletic: file(relativePath: { eq: "3.jpg" }) {
                        childImageSharp {
                        fluid(quality: 90, maxWidth: 1920) {
                            ...GatsbyImageSharpFluid_withWebp
                            }
                        }
                    }
                }
            `}

            render={data => { Object.keys(data).map((image, i ) => {

                    console.log(props.stylesItem[image].name)
                    console.log(image)
                    return (
                        <Col md={4}>
                            <div class="style-box">
                                <StyledBackgroundImage
                                    Tag="div"
                                    className="style-box-img"
                                    fluid={data[image].childImageSharp.fluid}
                                >
                                </StyledBackgroundImage>
                                <div class="style-text-box">
                                    <h5 class="h5">{props.stylesItem[image].style}</h5>
                                    <h3 class="h3 style-description">{props.stylesItem[image].name}</h3>
                                    <div class="extra-style-details">
                                        <p class="style-short-desc">{props.stylesItem[image].tagline}</p>
                                        <p>{props.stylesItem[image].text}</p>
                                        <ul class="hashtag-list">
                                            <li class="style-attribut"></li>
                                        </ul>
                                    </div>
                                </div>
                            </div>
                        </Col>
                        )
                    })
                }
            }
        />
    )
}

export default StyleItem

const StyledBackgroundImage = styled(BackgroundImage)`
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
`

我向该组件传递了以下道具(为了更好的可读性,使用abc虚拟字符串):

    stylesItem: {
            street: {
                style: "// STREET",
                name: "THE CANVAS",
                tagline: "abc",
                text: "abc",
                hashtags: [
                    "abc", "abc", "abc", "abc"
                ]
            },
            casual: {
                style: "// CASUAL",
                name: "THE CLASSIC",
                tagline: "abc",
                text: "abc",
                hashtags: [
                    "abc", "abc", "abc", "abc", "abc", "abc"
                ]
            },
            athletic: {
                style: "// ATHLETIC",
                name: "THE PERFORMER",
                tagline: "abc",
                text: "abc",
                hashtags: [
                    "abc", "abc", "abc", "abc", "abc", "abc"
                ]
            }
        }

我正在使用Gatsby的Staticquery加载3张图片(街道,休闲,运动),并希望在第二个return语句中渲染该部件3次(每张图片1张),每次都动态加载背景图片以及内容。

2 console.log()语句按预期打印。

console.log(props.stylesItem[image].name)
console.log(image)

THE CANVAS
street
THE CLASSIC
casual
THE PERFORMER
athletic

但是,没有任何内容呈现到屏幕上,并且我没有看到任何错误。我究竟做错了什么?

在此先感谢您的帮助

卡萨夫

您的渲染道具StaticQuery不会返回任何内容,因此不会渲染任何内容。

StaticQuery渲染道具中,您正在映射查询数据的键,然后成功生成了一堆JSX。但是请注意,您实际上并没有对其进行任何操作,因为生成的JSX不会返回。

因此,整个StyleItem组件会做很多工作,然后什么也不渲染,因为它渲染的唯一东西是StaticQuery

const StyleItem = ({ stylesItem }) => {
  return (
    <StaticQuery
      query={graphql`
        query {
          street: file(relativePath: { eq: "1.png" }) {
            childImageSharp {
              fluid(quality: 90, maxWidth: 1920) {
                ...GatsbyImageSharpFluid_withWebp
              }
            }
          }
          casual: file(relativePath: { eq: "2.png" }) {
            childImageSharp {
              fluid(quality: 90, maxWidth: 1920) {
                ...GatsbyImageSharpFluid_withWebp
              }
            }
          }
          athletic: file(relativePath: { eq: "3.png" }) {
            childImageSharp {
              fluid(quality: 90, maxWidth: 1920) {
                ...GatsbyImageSharpFluid_withWebp
              }
            }
          }
        }
      `}
      render={data => {
        // Make sure to return something here
        return Object.keys(data).map(imageTitle => {
          const fluidProp = data[imageTitle].childImageSharp.fluid
          const imageData = stylesItem[imageTitle]
          return (
            <>
              <StyledBackgroundImage
                Tag="div"
                className="style-box-img"
                fluid={fluidProp}
              ></StyledBackgroundImage>
              <div>
                <h5>{imageData.style}</h5>
                <h3>{imageData.name}</h3>
                <p>{imageData.tagline}</p>
                <p>{imageData.text}</p>
              </div>
            </>
          )
        })
      }}
    />
  )
}

Arrow功能不值一提的

当箭头函数中唯一的语句是时return,我们可以删除return和删除周围的花括号

(param1, param2, …, paramN) => expression  
// equivalent to: => { return expression; }

因此,上面的渲染道具StaticQuery可以进一步简化为:

render={data =>
  Object.keys(data).map(imageTitle => {...})
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React js 组件未呈现

来自分类Dev

React组件中的方法未呈现HTML

来自分类Dev

React组件未呈现Axios请求的响应

来自分类Dev

React useState更新未重新呈现组件

来自分类Dev

React Native App未呈现组件

来自分类Dev

Express应用未呈现我的React组件

来自分类Dev

react-leaflet-search 组件未呈现

来自分类Dev

状态更改后,react-redux组件未重新呈现

来自分类Dev

Axios调用后的.then中的setState之后,组件未重新呈现

来自分类Dev

如何在React Admin的show / ArrayField组件中呈现嵌套在对象内部的数组的内容?

来自分类Dev

React-Bootstrap模态未关闭。错误:呈现其他组件时无法更新组件(`OnboardPage`)

来自分类Dev

wrapPageElement中的组件会重新呈现-GatsbyJS

来自分类Dev

状态更改时,react组件中的输入元素的值未重新呈现

来自分类Dev

react-router链接更改了URL,但Route组件未呈现

来自分类Dev

将数据推送到数组后更新Sate时,React功能组件未呈现

来自分类Dev

React-router-dom v6,URL更改但组件未呈现

来自分类Dev

React-router-dom v6,URL更改但组件未呈现

来自分类Dev

React-router-dom v6,URL更改但组件未呈现

来自分类Dev

NextJS React 应用程序样式组件未正确呈现:警告:Prop `className` 不匹配

来自分类Dev

防止反应将未更改的组件呈现到虚拟DOM中

来自分类Dev

回发后以编程方式添加的复合组件中未呈现脚本

来自分类Dev

功能组件未呈现

来自分类Dev

组件未呈现/显示

来自分类Dev

子组件未呈现

来自分类Dev

循环遍历对象,然后将值传递给 axios 函数,在 react 组件中呈现结果

来自分类Dev

经过身份验证后,注销组件未呈现,这与react-router文档中的代码相似

来自分类Dev

如何从 json 对象呈现 React 组件?

来自分类Dev

React 组件不呈现内容

来自分类Dev

REACT - 呈现组件时出错

Related 相关文章

  1. 1

    React js 组件未呈现

  2. 2

    React组件中的方法未呈现HTML

  3. 3

    React组件未呈现Axios请求的响应

  4. 4

    React useState更新未重新呈现组件

  5. 5

    React Native App未呈现组件

  6. 6

    Express应用未呈现我的React组件

  7. 7

    react-leaflet-search 组件未呈现

  8. 8

    状态更改后,react-redux组件未重新呈现

  9. 9

    Axios调用后的.then中的setState之后,组件未重新呈现

  10. 10

    如何在React Admin的show / ArrayField组件中呈现嵌套在对象内部的数组的内容?

  11. 11

    React-Bootstrap模态未关闭。错误:呈现其他组件时无法更新组件(`OnboardPage`)

  12. 12

    wrapPageElement中的组件会重新呈现-GatsbyJS

  13. 13

    状态更改时,react组件中的输入元素的值未重新呈现

  14. 14

    react-router链接更改了URL,但Route组件未呈现

  15. 15

    将数据推送到数组后更新Sate时,React功能组件未呈现

  16. 16

    React-router-dom v6,URL更改但组件未呈现

  17. 17

    React-router-dom v6,URL更改但组件未呈现

  18. 18

    React-router-dom v6,URL更改但组件未呈现

  19. 19

    NextJS React 应用程序样式组件未正确呈现:警告:Prop `className` 不匹配

  20. 20

    防止反应将未更改的组件呈现到虚拟DOM中

  21. 21

    回发后以编程方式添加的复合组件中未呈现脚本

  22. 22

    功能组件未呈现

  23. 23

    组件未呈现/显示

  24. 24

    子组件未呈现

  25. 25

    循环遍历对象,然后将值传递给 axios 函数,在 react 组件中呈现结果

  26. 26

    经过身份验证后,注销组件未呈现,这与react-router文档中的代码相似

  27. 27

    如何从 json 对象呈现 React 组件?

  28. 28

    React 组件不呈现内容

  29. 29

    REACT - 呈现组件时出错

热门标签

归档