#reactjs #graphql #markdown #gatsby
#reactjs #graphql #уценка #gatsby
Вопрос:
Похоже, мне просто не повезло со статическим запросом в компоненте react. Похоже, он отлично работает на страницах, но не работает с компонентами. В основном {data} всегда поступает как неопределенный. Пробовал allMarkdownRemark amp; markdownRemark с разными фрагментами кода Graphql. Запрос возвращает правильные данные при запросе непосредственно через клиент graphql, но не через компонент react.
import React from "react";
import { StaticQuery, graphql } from "gatsby";
import { Link } from "gatsby";
import logo from "../../assets/images/logo.png";
import footerMap from "../../assets/images/footer-map.png";
export default () => {
return (
<StaticQuery
query={graphql`query FooterData {
allMarkdownRemark(filter: {frontmatter: {componentKey: {eq: "Footer"}}}) {
edges {
node {
frontmatter {
explore {
footerlinks1
footerlinks1Url
}
headoffice {
Address
HOAddress
HONumber
}
services {
footerlinks2
footerlinks2Url
}
}
}
}
}
}
`}
render={(data) => (
<footer className="footer-area bg-color">
<div className="container">
<div className="row">
<div className="col-lg-4 col-sm-6">
<h3>Explore</h3>
<ul className="footer-links-list">
{
data.allMarkdownRemarks.edges[0].node.frontmatter.explore.map(link => (
<li>
<Link to={link.footerlinks1Url}>{link.footerlinks1}</Link>
</li>
))}
</ul>
</div>
</div>
</div>
</footer>
)}
/>
)};
Run code snippetHide resultsExpand snippet
Error I am getting is below.
===========================
TypeError: Cannot read property 'edges' of undefined
render
C:/Users/HP/source/XXX/src/components/App/Footer.js:102
99 | <div className="single-footer-widget pl-5">
100 | <h3>Explore</h3>
101 |
> 102 | <ul className="footer-links-list">
103 | {
104 | data.allMarkdownRemarks.edges[0].node.frontmatter.explore.map(link => (
105 | <li>
View compiled
StaticQueryDataRenderer
C:/Users/HP/source/XXX/.cache/gatsby-browser-entry.js:37
34 | : combinedStaticQueryData[query] amp;amp; combinedStaticQueryData[query].data
35 |
36 | return (
> 37 | <React.Fragment>
38 | {finalData amp;amp; render(finalData)}
39 | {!finalData amp;amp; <div>Loading (StaticQuery)</div>}
40 | </React.Fragment>
View compiled
19 stack frames were collapsed.
This screen is visible only in development. It will not appear if the app crashes in production.
Open your browser’s developer console to further inspect this error.
Ответ №1:
У вас есть опечатка в вашем вложенном объекте запроса, вы используете allMarkdownRemarks
(обратите внимание на последнее S
) вместо allMarkdownRemark
замены его на:
{data.allMarkdownRemark.edges[0].node.frontmatter.explore.map(link => (
<li>
<Link to={link.footerlinks1Url}>{link.footerlinks1}</Link>
</li>
))}
Комментарии:
1. Да, опечатка произошла, когда я скопировал код и уменьшил размер моего сообщения здесь. Но в исходном коде нет (ов). Запрос возвращает null с allMarkdownRemark
2. И полностью работает в вашем
localhost:8000/___graphql
?3. Спасибо @ferran, это устранило проблему
![]()