GatsbyImage - GraphQL TypeError: Cannot Read Property 'Split' of Undefined
12 replies
Last updated: Mar 25, 2021
J
How do you get GatsbyImage to work with gatsby-sanity-source?I have implemented this (
https://github.com/sanity-io/gatsby-source-sanity#using-images ) exactly as shown in the example, but cannot get it to work as shown.I have formatted my query exactly as shown (notice just the “asset”, without the “fluid, src, or gatsbyImage:
However, this gives me an error on build:
If I add fluid, src, and even gatsbyImageData to the query:
I get a different error:
A bit lost here… if I skip GatsbyImage altogether, and just use fluid src with <img src.., the site builds fine, including showing images.
any ideas?
https://github.com/sanity-io/gatsby-source-sanity#using-images ) exactly as shown in the example, but cannot get it to work as shown.I have formatted my query exactly as shown (notice just the “asset”, without the “fluid, src, or gatsbyImage:
query vehicleQuery($slug: String) { sanityVehicle(id: {eq: $slug}) { id _id modellbetegnelse manufacturer { label logoimage { asset } }
GraphQLError: Field "asset" of type "SanityImageAsset" must have a selection of subfields. Did you mean "asset { ... }"?
If I add fluid, src, and even gatsbyImageData to the query:
query vehicleQuery($slug: String) { sanityVehicle(id: {eq: $slug}) { id _id modellbetegnelse manufacturer { label logoimage { asset { fluid { src } gatsbyImageData } } }
WebpackError: TypeError: Cannot read property 'split' of undefined
failed Building static HTML for pages - 0.243s ERROR #95313 Building static HTML failed for path "/vehicles/-d9d34e74-0ffb-5ae8-b103-7895bfbd02c7" See our docs page for more info on this error: <https://gatsby.dev/debug-html> 161 | var hasOriginalRatio = desiredAspectRatio === dimensions.aspectRatio; 162 | var outputHeight = Math.round(height ? height : width / desiredAspectRatio); > 163 | var imgUrl = isOriginalSize(width, outputHeight) || | ^ 164 | (hasOriginalRatio && width > dimensions.width && outputHeight > dimensions.height) 165 | ? url 166 | : url + "?w=" + width + "&h=" + outputHeight + "&fit=crop"; WebpackError: TypeError: Cannot read property 'split' of undefined - getGatsbyImageProps.ts:163 gatsby-starter-hello-world/src/images/getGatsbyImageProps.ts:163:49 - getGatsbyImageProps.ts:393 gatsby-starter-hello-world/src/images/getGatsbyImageProps.ts:393:21 - vehicledetail.js:14 gatsby-starter-hello-world/src/templates/vehicledetail.js:14:36 - extends.js:8 [gatsby-starter-hello-world]/[@babel]/runtime/helpers/extends.js:8:1 - extends.js:14 [gatsby-starter-hello-world]/[@babel]/runtime/helpers/extends.js:14:1 - extends.js:13 [gatsby-starter-hello-world]/[@babel]/runtime/helpers/extends.js:13:1 - static-entry.js:263 gatsby-starter-hello-world/.cache/static-entry.js:263:20 - history.js:26 [gatsby-starter-hello-world]/[@gatsbyjs]/reach-router/es/lib/history.js:26:1
System: OS: macOS 11.2.3 CPU: (8) x64 Intel(R) Core(TM) i7-7920HQ CPU @ 3.10GHz Shell: 5.8 - /bin/zsh Binaries: Node: 15.12.0 - /usr/local/bin/node npm: 7.6.3 - /usr/local/bin/npm Languages: Python: 2.7.16 - /usr/bin/python Browsers: Chrome: 89.0.4389.90 Firefox: 86.0 Safari: 14.0.3 npmPackages: gatsby: ^3.0.1 => 3.1.2 gatsby-plugin-image: ^1.1.1 => 1.1.2 gatsby-plugin-postcss: ^4.1.0 => 4.1.0 gatsby-plugin-sharp: ^3.1.1 => 3.1.2 gatsby-source-filesystem: ^3.1.0 => 3.1.0 gatsby-source-sanity: ^7.0.0 => 7.0.0 gatsby-transformer-sharp: ^3.1.0 => 3.1.0 npmGlobalPackages: gatsby-cli: 3.1.0
Mar 24, 2021, 8:54 AM
Here’s your graphql page query:
profiles { id: _key name bio image { asset { fluid(maxWidth: 700) { ...GatsbySanityImageFluid } } } }
Mar 24, 2021, 10:04 PM
import React, { useEffect, useRef, useState } from 'react'; import Image from 'gatsby-image'; import './Image.scss'; const ResponsiveImage = (props) => { const { image, className = '', style = {}, onLoaded, } = props; const [loaded, setLoaded] = useState(false); const imgRef = useRef(); useEffect(() => { if (onLoaded && imgRef.current && imgRef.current.state.imgLoaded) { onLoaded(); } }, [imgRef.current, loaded]); return ( <Image className={className} fluid={image.asset.fluid} alt={image.alt || ''} style={style} ref={imgRef} onLoad={() => setLoaded(true)} /> ); }; export default ResponsiveImage;
Mar 24, 2021, 10:05 PM
You don’t need all that (eg. the onLoad handler), but its a nice little bit of functionality
Mar 24, 2021, 10:05 PM
Mar 24, 2021, 10:07 PM
It’s made by
user L
, and I wish I had used it earlier in my project, because it allows for extra control over images sourced from Sanity than gatsby-source-sanity
Mar 24, 2021, 10:08 PM
J
Very nice, thanks so much for the help
Mar 25, 2021, 7:43 PM
Sanity– build remarkable experiences at scale
Sanity is a modern headless CMS that treats content as data to power your digital business. Free to get started, and pay-as-you-go on all plans.