Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在gatsby.js中将graphql数据从父级传递给子级_Javascript_Reactjs_Graphql_Gatsby - Fatal编程技术网

Javascript 在gatsby.js中将graphql数据从父级传递给子级

Javascript 在gatsby.js中将graphql数据从父级传递给子级,javascript,reactjs,graphql,gatsby,Javascript,Reactjs,Graphql,Gatsby,为了不重复我自己,我想做一个这样的组件 import React, { Suspense } from 'react' // import PropTypes from 'prop-types' import { graphql, Link } from "gatsby" import Img from "gatsby-image" import Layout from "../components/layout" // import

为了不重复我自己,我想做一个这样的组件

import React, { Suspense } from 'react'
// import PropTypes from 'prop-types'
import { graphql, Link } from "gatsby"
import Img from "gatsby-image"
import Layout from "../components/layout"
// import SEO from "../components/seo"

// import Pager from "../components/pager"

import { lazy } from '@loadable/component'

import loadable from '@loadable/component'

const Pagination = loadable(() => import('../components/page/pagination'))

const Pager = lazy(() => import('../components/pager'))

const Dropdown = lazy(() => import('../components/dropdown/index'))


class PaginationNew extends React.Component {

    render() {
        const data = this.props
        const posts = this.props.data.allCockpitPost.edges
        const { pageContext } = this.props
    // mama, pageContext
        
    return (
        <>
            <div className="paginate-name-div">
                <h1 className="paginate-h1">Semua postingan</h1>
                {typeof window !== 'undefined' && (
                    <Suspense fallback={<div>Loading...</div>}>
                        <Dropdown pageContext={pageContext} />
                    </Suspense>
                )}
            </div>

            <ul className="paginate-ul">
                {posts.map(({ node, }) => {
                    return (
                        <li className="paginate-li" key={node.id}>
                            <Link to={`/${node.title.slug}`} className="paginate-link">
                                <div className="paginate-div1" >
                                    <Img crossOrigin="true" imgStyle={{ objectFit: "unset", }} loading="lazy" fadeIn={false} fluid={node.image.value.childImageSharp.fluid} alt={node.title.value} className="paginate-img" />
                                </div>
                                <div className="paginate-div2">
                                    <h3 dangerouslySetInnerHTML={{ __html: node.title.value }} className="paginate-h3" />
                                    <p className="paginate-written"> Ditulis Oleh {node.content.value.childMarkdownRemark.frontmatter.author} Pada {node.date.value}</p>
                                    <div dangerouslySetInnerHTML={{ __html: node.description.value.childMarkdownRemark.excerpt }} className="paginate-div3">
                                    </div>
                                </div>
                            </Link>
                        </li>
                    )
                })}
            </ul>
            {typeof window !== 'undefined' && (
                <Suspense fallback={<div>Loading...</div>}>
                    <Pager pageContext={pageContext} />
                </Suspense>
            )}   
        </>
    )
}
}

export default PaginationNew

我通过做最少的复制找到了答案

组件如下所示:

import React, { Suspense } from 'react'
// import PropTypes from 'prop-types'
import { graphql, Link } from "gatsby"
import Img from "gatsby-image"
import Layout from "../components/layout"
// import SEO from "../components/seo"

// import Pager from "../components/pager"

import { lazy } from '@loadable/component'

import loadable from '@loadable/component'



// import Dropdown from '../components/dropdown/index'


// const Layout = loadable(() => import('../components/layout'))
const SEO = loadable(() => import('../components/seo'))

const PaginationNew = loadable(() => import('../components/page/pagination'))

const Pager = lazy(() => import('../components/pager'))

const Dropdown = lazy(() => import('../components/dropdown/index'))



export const pageQuery = graphql`
  query($skip: Int!, $limit: Int!) {
    site { 
        siteMetadata {
        title
      } 
    }
    allCockpitPost(filter: {lang: {eq: "id"}, published: {value: {eq: true}}}, sort: {order: DESC, fields: date___value}, limit: $limit, skip: $skip) {
      edges { 
        node {
          id
          title { 
            value
            slug
          }
          image { 
            value {
              childImageSharp {
                fluid(toFormat: WEBP, webpQuality: 80, toFormatBase64: WEBP, quality: 80, pngQuality: 80, jpegQuality: 80, maxWidth: 600) {
              ...GatsbyImageSharpFluid_withWebp_noBase64
                }
              }
            }
          }
          description {  
            value {
              childMarkdownRemark {
                excerpt(pruneLength: 160)
              }
            }
          }
          content { 
              value {
                childMarkdownRemark {
                  frontmatter {
                    author
                  }
                }
              }
            }
            date {
            value(formatString: " DD MMMM, YYYY")
          }
        }
      } 
    }
  }
`;


const PaginateTemplate = ({location, data}) =>{

return (

  <Layout location={location} >
  <SEO title="semua postingan" description="blog oleh pelajar dan untuk orang-orang yang ingin belajar." />
    <PaginationNew data={data}/>
  </Layout>
)}

export default PaginateTemplateimport React, { Suspense } from 'react'
// import PropTypes from 'prop-types'
import { graphql, Link } from "gatsby"
import Img from "gatsby-image"
import Layout from "../components/layout"
// import SEO from "../components/seo"

// import Pager from "../components/pager"

import { lazy } from '@loadable/component'

import loadable from '@loadable/component'



// import Dropdown from '../components/dropdown/index'


// const Layout = loadable(() => import('../components/layout'))
const SEO = loadable(() => import('../components/seo'))

const PaginationNew = loadable(() => import('../components/page/pagination'))

const Pager = lazy(() => import('../components/pager'))

const Dropdown = lazy(() => import('../components/dropdown/index'))



export const pageQuery = graphql`
  query($skip: Int!, $limit: Int!) {
    site { 
        siteMetadata {
        title
      } 
    }
    allCockpitPost(filter: {lang: {eq: "id"}, published: {value: {eq: true}}}, sort: {order: DESC, fields: date___value}, limit: $limit, skip: $skip) {
      edges { 
        node {
          id
          title { 
            value
            slug
          }
          image { 
            value {
              childImageSharp {
                fluid(toFormat: WEBP, webpQuality: 80, toFormatBase64: WEBP, quality: 80, pngQuality: 80, jpegQuality: 80, maxWidth: 600) {
              ...GatsbyImageSharpFluid_withWebp_noBase64
                }
              }
            }
          }
          description {  
            value {
              childMarkdownRemark {
                excerpt(pruneLength: 160)
              }
            }
          }
          content { 
              value {
                childMarkdownRemark {
                  frontmatter {
                    author
                  }
                }
              }
            }
            date {
            value(formatString: " DD MMMM, YYYY")
          }
        }
      } 
    }
  }
`;


const PaginateTemplate = ({location, data}) =>{

return (

  <Layout location={location} >
  <SEO title="semua postingan" description="blog oleh pelajar dan untuk orang-orang yang ingin belajar." />
    <PaginationNew data={data}/>
  </Layout>
)}

export default PaginateTemplate
然后将道具添加到分页模板

    const kurikulumPageResults = graphql(`
        {
            kurikulumPageResults: allCockpitMarkdown(filter: {childMarkdownRemark: {frontmatter: {title: {ne: ""}, tags: {eq: "kurikulum"}}}}) {
        edges {
          node {
            childMarkdownRemark {
              frontmatter {
                title
                slug
              }
            }
          }
        }
      }
        }
    `).then(result => {
        if (result.errors) {
            Promise.reject(result.errors);
        }


        paginate({
      createPage, 
      items: result.data.kurikulumPageResults.edges, 
      itemsPerPage: 5, 
      pathPrefix: '/kurikulum', 
      component: path.resolve('./src/templates/kurikulum.jsx'),

  
    })  
    });
constpaginatetemplate=({data})=>{
const posts=data.allCockpitPost.edges
返回(

const{data}=this.props
?不使用lazy/loadable for not user dynamic[all,尤其是nav]《盖茨比》中的内容是有意义的?你为什么要这样做?它不会比《盖茨比》中的预渲染慢吗?盖茨比滥用?你问了两个问题,对吗?第一个我不理解,所以这就是为什么我要问它…第二个我只是想懒洋洋地加载它,因为灯塔建议了它。我想我得了10分因为它。好的,我必须检查它…确切的位置/哪些数据没有传递?…临时删除惰性/可加载的…在codesandbox上创建活动的、可编辑的?我想我通过进行最小生产意外地找到了答案。这里是:你可以回答你自己的问题
const PaginationNew = ({data}) => {


        const posts = data
const  PaginateTemplate = ({data }) => {

    const posts = data.allCockpitPost.edges

return (

    <PaginationNew data={posts}/>