Reactjs React传单在开发期间有效,在构建时失败,注意到缺少构造函数图标
我用盖茨比和传单来制作地图。唯一的问题是我想使用地图上的多个图标作为标记图标。一切都在开发过程中工作,功能齐全,但当我尝试“盖茨比构建”时,它失败了: 这里是错误Reactjs React传单在开发期间有效,在构建时失败,注意到缺少构造函数图标,reactjs,leaflet,gatsby,Reactjs,Leaflet,Gatsby,我用盖茨比和传单来制作地图。唯一的问题是我想使用地图上的多个图标作为标记图标。一切都在开发过程中工作,功能齐全,但当我尝试“盖茨比构建”时,它失败了: 这里是错误 < Marker 25 | position={[`${genome.coordinate_x}`,`${genome.coordinate_y}`]} > 26 | icon =
< Marker
25 | position={[`${genome.coordinate_x}`,`${genome.coordinate_y}`]}
> 26 | icon = {new Icon({
| ^
27 | iconUrl: genome.bee_icon.childImageSharp.fluid.src,
28 | iconSize: [60],
29 | iconAnchor: [20, 40]
WebpackError: TypeError: leaflet__WEBPACK_IMPORTED_MODULE_3__.Icon is not a constructor
26 |图标={新图标({
| ^
27 | iconUrl:genome.bee_icon.childImageSharp.fluid.src,
28 | iconSize:[60],
29 | iconAnchor:[20,40]
WebPackageError:TypeError:传单\uu网页包\u导入的\u模块\uu 3\uuu。图标不是构造函数
这是页面的代码
import React from "react"
import LayoutNoPadding from "../components/layoutNoPadding"
import { Map, Marker, Popup, TileLayer, Tooltip } from 'react-leaflet'
import {Icon} from 'leaflet'
import {graphql} from 'gatsby'
import Link from 'gatsby-link'
import SEO from '../components/SEO'
import Img from 'gatsby-image'
const IndexPage = ({data}) => {
const {allStrapiGenomes:{nodes:genomes}} = data
return (
<LayoutNoPadding>
<SEO title="WWB" />
<Map center={[0, 0]} zoom={2} maxZoom={5} minZoom={2} attributionControl={false} >
<TileLayer
url="https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png"
/>
{genomes.map((genome)=> {
return (
<div className="bee-icons">
<Marker
position={[`${genome.coordinate_x}`,`${genome.coordinate_y}`]}
icon = {new Icon({
iconUrl: genome.bee_icon.childImageSharp.fluid.src,
iconSize: [60],
iconAnchor: [20, 40]
})}
>
<Tooltip>{genome.bee_name}</Tooltip>
<Popup>
<Img fluid={genome.bee_icon.childImageSharp.fluid} alt={genome.bee_name} />
<h1 className="text-xl py-2">{genome.bee_name}</h1>
<h1 className="text-lg text-gray-500">{genome.bee_genome}</h1>
<p className="text-sm text-gray-700 pb-2">{genome.summary}</p>
<Link fade to={`/genomes/${genome.slug}`} className="flex bg-gray-200 py-2 px-4 focus:outline-none text-lg cursor-pointer text-white rounded-full justify-center text-white hover:bg-gray-300 transition-all duration-500 ease-in-out">Read More</Link>
</Popup>
</Marker>
</div>
)
})}
</Map>
</LayoutNoPadding>
)
}
export default IndexPage
export const query = graphql`
{
allStrapiGenomes {
nodes {
bee_icon {
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
bee_genome
coordinate_x
coordinate_y
summary
strapiId
bee_photo {
childImageSharp {
fluid {
...GatsbyImageSharpFluid
}
}
}
bee_name
content
slug
}
}
}
`
从“React”导入React
从“./组件/LayoutNoPadding”导入LayoutNoPadding
从“反应传单”导入{Map,Marker,Popup,tillelayer,Tooltip}
从“传单”导入{Icon}
从“盖茨比”导入{graphql}
从“盖茨比链接”导入链接
从“../components/SEO”导入SEO
从“盖茨比图像”导入Img
常量IndexPage=({data})=>{
常量{allStrapiGenomes:{节点:基因组}}=数据
返回(
{基因组.map((基因组)=>{
返回(
{genome.bee_name}
{genome.bee_name}
{基因组。蜜蜂基因组}
{genome.summary}
阅读更多
)
})}
)
}
导出默认索引扩展
export const query=graphql`
{
全链基因组{
节点{
蜜蜂图标{
childImageSharp{
流质{
…盖茨比磁流体
}
}
}
蜜蜂基因组
坐标
协调
总结
斯特拉皮德
比尤照片{
childImageSharp{
流质{
…盖茨比磁流体
}
}
}
比尤名字
内容
鼻涕虫
}
}
}
`
我确信这与在标记器中宣布图标构造函数有关,是否合法,解决方案是什么?提前感谢。将其包装在检查
窗口中
条件:
return (
{typeof window !== 'undefined' &&
<LayoutNoPadding>
<SEO title="WWB" />
<Map center={[0, 0]} zoom={2} maxZoom={5} minZoom={2} attributionControl={false} >
<TileLayer
url="https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png"
/>
{genomes.map((genome)=> {
return (
<div className="bee-icons">
<Marker
position={[`${genome.coordinate_x}`,`${genome.coordinate_y}`]}
icon = {new Icon({
iconUrl: genome.bee_icon.childImageSharp.fluid.src,
iconSize: [60],
iconAnchor: [20, 40]
})}
>
<Tooltip>{genome.bee_name}</Tooltip>
<Popup>
<Img fluid={genome.bee_icon.childImageSharp.fluid} alt={genome.bee_name} />
<h1 className="text-xl py-2">{genome.bee_name}</h1>
<h1 className="text-lg text-gray-500">{genome.bee_genome}</h1>
<p className="text-sm text-gray-700 pb-2">{genome.summary}</p>
<Link fade to={`/genomes/${genome.slug}`} className="flex bg-gray-200 py-2 px-4 focus:outline-none text-lg cursor-pointer text-white rounded-full justify-center text-white hover:bg-gray-300 transition-all duration-500 ease-in-out">Read More</Link>
</Popup>
</Marker>
</div>
)
})}
</Map>
</LayoutNoPadding>
}
)
返回(
{typeof window!==“未定义”&&
{基因组.map((基因组)=>{
返回(
{genome.bee_name}
{genome.bee_name}
{基因组。蜜蜂基因组}
{genome.summary}
阅读更多
)
})}
}
)
gatsby develop
发生在浏览器端,因为它创建了一个套接字来实时刷新和重新水合组件以及浏览器。gatsby build
发生在服务器端,您可能会注意到,在服务器端没有窗口(或任何其他浏览器全局对象,如文档
)有多种解决方案可以绕过这个问题:从添加null
加载器,到通过webpack传输时从node\u modules
产生的整个不良依赖,再到添加一个简单的条件来检查窗口是否已定义(提供的解决方案)
您可以在中查看更多详细信息。将其包装在检查窗口中
条件:
return (
{typeof window !== 'undefined' &&
<LayoutNoPadding>
<SEO title="WWB" />
<Map center={[0, 0]} zoom={2} maxZoom={5} minZoom={2} attributionControl={false} >
<TileLayer
url="https://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}{r}.png"
/>
{genomes.map((genome)=> {
return (
<div className="bee-icons">
<Marker
position={[`${genome.coordinate_x}`,`${genome.coordinate_y}`]}
icon = {new Icon({
iconUrl: genome.bee_icon.childImageSharp.fluid.src,
iconSize: [60],
iconAnchor: [20, 40]
})}
>
<Tooltip>{genome.bee_name}</Tooltip>
<Popup>
<Img fluid={genome.bee_icon.childImageSharp.fluid} alt={genome.bee_name} />
<h1 className="text-xl py-2">{genome.bee_name}</h1>
<h1 className="text-lg text-gray-500">{genome.bee_genome}</h1>
<p className="text-sm text-gray-700 pb-2">{genome.summary}</p>
<Link fade to={`/genomes/${genome.slug}`} className="flex bg-gray-200 py-2 px-4 focus:outline-none text-lg cursor-pointer text-white rounded-full justify-center text-white hover:bg-gray-300 transition-all duration-500 ease-in-out">Read More</Link>
</Popup>
</Marker>
</div>
)
})}
</Map>
</LayoutNoPadding>
}
)
返回(
{typeof window!==“未定义”&&
{基因组.map((基因组)=>{
返回(
{genome.bee_name}
{genome.bee_name}
{基因组。蜜蜂基因组}
{genome.summary}
阅读更多
)
})}
}
)
gatsby develop
发生在浏览器端,因为它创建了一个套接字来实时刷新和重新水合组件以及浏览器。gatsby build
发生在服务器端,您可能会注意到,在服务器端没有窗口(或任何其他浏览器全局对象,如文档
)有多种解决方案可以绕过这个问题:从添加null
加载器,到通过webpack传输时从node\u modules
产生的整个不良依赖,再到添加一个简单的条件来检查窗口是否已定义(提供的解决方案)
您可以在中查看更多详细信息。您是否尝试在没有新关键字的情况下调用Icon()
。@ksav否,正如您在代码页上所看到的,我调用新的用于生成构造函数,不知怎的,它在开发期间[在我的计算机上]工作正常,但当我点击[gatsby build]时,它给了我一个错误:再次感谢。@ksav我刚刚做了,它甚至在使用以下代码的开发过程中也失败了:``TypeError:无法读取未定义的24 | 26 | icon={icon({27 | iconUrl:genome.bee|icon.childImageSharp.flui)的属性'initialize'