在服务器端渲染中反应传单地图错误

2023-12-02

已解决 --- 请阅读更新 2

你好,我在使用 React-leaflet 地图的 React 入门套件中遇到此错误

它就像 github 模块示例,但我不知道问题是什么!我认为SSR有问题

React 版本:16.x 和 React 入门套件

更新1

ReferenceError: window is not defined
    at D:\project\react-starterkit\node_modules\leaflet\src\core\Util.js:217:24
    at version (D:\project\react-starterkit\node_modules\leaflet\dist\leaflet-src.js:7:65)
    at Object.<anonymous> (D:\project\react-starterkit\node_modules\leaflet\dist\leaflet-src.js:10:2)
    at Module._compile (module.js:635:30)
    at Module._extensions..js (module.js:646:10)
    at Object.require.extensions.(anonymous function) [as .js] (D:\project\react-starterkit\node_modules\babel-register\lib\node.js:152:7)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Module.require (module.js:579:17)

通过更新反应解决最新版本 16.x

TypeError: (0 , _react.createContext) is not a function
    at Object.<anonymous> (D:\project\react-starterkit\node_modules\react-leaflet\lib\context.js:18:47)
    at Module._compile (module.js:635:30)
    at Module._extensions..js (module.js:646:10)
    at Object.require.extensions.(anonymous function) [as .js] (D:\project\react-starterkit\node_modules\babel-register\lib\node.js:152:7)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Module.require (module.js:579:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (D:\project\react-starterkit\node_modules\react-leaflet\lib\index.js:5:16)

这是我的代码:

import React from 'react';
import { Map, TileLayer, Marker, Popup } from 'react-leaflet';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import s from './Home.css';

class Home extends React.Component {
  constructor(props){
    super(props);
    this.state = {
      lat: 51.505,
      lng: -0.09,
      zoom: 13,
    }
  }
  render() {
    const position = [this.state.lat, this.state.lng]
    return (
      <Map center={position} zoom={this.state.zoom}>
        <TileLayer
          attribution="&amp;copy <a href=&quot;http://osm.org/copyright&quot;>OpenStreetMap</a> contributors"
          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        />
        <Marker position={position}>
          <Popup>
            A pretty CSS3 popup. <br /> Easily customizable.
          </Popup>
        </Marker>
      </Map>
    );
  }
}

export default withStyles(s)(Home);

UPDATE 2 我自己解决了

import React from 'react';
import withStyles from 'isomorphic-style-loader/lib/withStyles';
import leafletCss from '!isomorphic-style-loader!css-loader?modules=false!leaflet/dist/leaflet.css'; //if use isomorphic-style-loader
import s from './GenerateMap.css';

let RL = false;
let Map = false;
let TileLayer = false;
let Marker = false;
let Popup = false;
if (process.env.BROWSER) {
  RL = require('react-leaflet');
  Map = RL.Map;
  TileLayer = RL.TileLayer;
  Marker = RL.Marker;
  Popup = RL.Popup;
}

class GenerateMap extends React.Component {
  render() {
    const position = [51.505, -0.09]

    return (
      <div className={s.root}>
        {process.env.BROWSER && (
          <Map style={{width:'100%',height: '500px'}} center={position} zoom={13}>
            <TileLayer
              url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
              attribution="&copy; <a href=&quot;http://osm.org/copyright&quot;>OpenStreetMap</a> contributors"
            />
            <Marker position={position} icon=''>
              <Popup>A pretty CSS3 popup.<br />Easily customizable.</Popup>
            </Marker>
          </Map>
        )}
      </div>
    );
  }
}

export default withStyles(s, leafletCss)(GenerateMap);

从堆栈跟踪中,我看到react-leaflet正在使用createContext()这是 React Context API 的一部分。这仅适用于反应16.3.

你检查过吗version of react-leaflet您正在使用?您可能使用依赖于 React 16.3 的版本。您可以尝试降级到react-leaflet1.9.1 看看是否有效。

更新的答案:

window未定义是当您的代码尝试访问全局变量时最有可能发生的错误window仅当您的代码在浏览器(而不是 SSR)中运行时才定义。检查您的代码,看看该错误是否是由于您的代码而发生的。如果是由于react-leaflet, 参见下文...

经过更多搜索,似乎react-leaflet构建时并未考虑到服务器端渲染。你可以尝试检查反应传单通用来实施它。如果所有其他方法都失败,您可能需要构建自己的传单包装器才能实现此目的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在服务器端渲染中反应传单地图错误 的相关文章

随机推荐

  • 从字符串数组中提取数字

    我有一个字符串数组 scala gt tokens res34 Array String Array The value of your profile is 234 2 You have potential to gain 8 3 mor
  • 从 C# WinForms 应用程序打开 VC++ 表单时出现选项卡导航问题

    我有一个 C 应用程序 具有各种输入控件 文本框 组合框 按钮等 以及选项卡控件 在其中一个选项卡中 我嵌入了一个非托管 C 窗口 C 窗口也几乎没有输入控件 使用 Tab 键 我可以导航到 C 控件 不会出现任何问题 但是 当我在 C 窗
  • 如何使用 PHP 查找序列中缺失的值?

    假设您有一个数组 value gt timestamp 这些值随着时间的推移而增加 但可以随时重置 例如 array array 1 gt 6000 2 gt 7000 3 gt 8000 7 gt 9000 8 gt 10000 9 gt
  • 函数必须只有一个参数

    我已经很长时间没有用 C 编写代码了 我正在尝试修复一些旧代码 我收到错误 TOutputFile TOutputFile operator lt lt TOutputFile T must have exactly one argumen
  • sympy autowrap(cython):参数数量的限制,数组形式的参数?

    我有以下问题 我想使用 autowrap 生成 sympy 矩阵的编译版本 其中单元格包含 sympy 表达式 根据我的问题的具体说明 参数的数量可能会变得非常大 我遇到了以下两个问题 autowrap 接受的参数数量似乎限制为 509 即
  • 生成最多一定数量的素数列表

    我正在尝试生成 10 亿以下的素数列表 我正在尝试这个 但这种结构非常糟糕 有什么建议么 a lt 1 1000000000 d lt 0 b lt for i in a for j in 1 i if i j 0 d lt c d i 乔
  • 防止 Apache 对 gzip 内容进行分块

    当在 Apache2 中使用 mod deflate 时 Apache 将对 gzip 内容进行分块 设置 Transfer encoding chunked 标头 虽然这会加快下载时间 但我无法显示进度条 如果我自己在 PHP 中处理压缩
  • 如何从 Javascript 中删除tinymce编辑器按钮?

    我正在使用 TinyMCE4 3 10 作为 Wordpress 4 5 4 的一部分 我使用以下代码创建一个自定义的tinymce编辑器 tinyMCE execCommand mceAddEditor false captionId t
  • 可以使用动态 html 表作为源数据吗?

    如果我有一个 html 表 其中包含根据文件中的过滤器计算的值 我是否可以根据这些值读取并生成绘图 我不确定回答这个问题是否重要 但我主要使用 R 并使用 r 代码块从我使用创建的共享数据对象名称shared ert计算总和crosstal
  • 对静态成员的未定义引用

    我正在使用交叉编译器 我的代码是 class WindowsTimer public WindowsTimer frequency QuadPart 0ull private static LARGE INTEGER frequency 我
  • 使用 DatePicker 记录 Espresso 测试

    测试记录器生成的代码在记录后运行时立即失败 原因是 在录制时 我点击年份 年份旋转器弹出 我向后滚动 然后选择其中一个年份 记录器不捕获滚动 在 Xcode 中 他们添加了一种滚动到项目的方法 我在浓缩咖啡中找不到类似的东西 使用Andro
  • 使用 openNLP maxent 训练模型

    我有黄金数据 其中注释了多个文档中的所有房间号 我想使用 openNLP 来训练一个使用这些数据并对房间号进行分类的模型 我不知道从哪里开始 我阅读了 openNLP maxent 文档 查看了 opennlp tools 中的示例 现在查
  • 可以禁用 Symfony 的 intl 要求吗?

    我在共享主机上有一个 Symfony 2 项目 显然 提供商不会为 PHP 打开 Intl 扩展 有没有办法打开它 或者我被迫重新评估整个项目 如果您的网络服务器不提供intl扩展 您可以使用Locale成分 它可以通过 Composer
  • 在对象数组中,查找属性与搜索匹配的对象的索引的最快方法

    我一直在四处冲浪 试图找到一种有效的方法来做到这一点 但一无所获 我有一个对象数组 如下所示 array i id some number array i name some name 我想要做的是找到 id 等于的对象的索引 例如 0 1
  • 图像无法显示,因为它包含 php gd 中的错误

    这是Link我正在创建一个图像 但是我的 GD 已安装并正常工作 正如我使用第一个示例进行测试时一样 但此代码会中断并标记 图像无法显示 因为它包含错误 CODE
  • Windows Phone 8.1 相机初始化 - 访问被拒绝异常

    使用适用于 Windows Phone 的 8 1 MediaCapture 类 已声明 音频 和 网络摄像头 的功能 其中 90 是would成为异常的原因 Kicker 是 它在 WP 模拟器中完美运行 但在实际设备上却崩溃了 确切的例
  • Java:捕获屏幕上内容的视频

    我们正在考虑用 Java 编写一个软件 在运行时记录特定时间内的监控内容 您对如何有效捕获监视器输出有什么建议吗 占用的 CPU 越少 我们捕获屏幕的频率就越多 生成的视频就越流畅 而不会干扰正在运行的其他应用程序 如果复制屏幕捕获部分不是
  • fgetcsv( ) 和 Unicode 的问题

    我有一个代码 在本地主机上 我读取 csv 文件 带有 Unicode 字符 没有问题 但是当在主机上上传代码时输出什么也没有 为什么 什么是解决方案 while data fgetcsv fin 5000 FALSE var dump d
  • ThumbnailUtils.createVideoThumbnail 对于现有 mp4 视频返回 null

    我有一个视频 我需要获取它的缩略图 我用ThumbnailUtils用于此目的的类 但它返回 null 而不是预期的Bitmap 当我调试我的应用程序时 我在里面看到了createVideoThumbnail method MediaMet
  • 在服务器端渲染中反应传单地图错误

    已解决 请阅读更新 2 你好 我在使用 React leaflet 地图的 React 入门套件中遇到此错误 它就像 github 模块示例 但我不知道问题是什么 我认为SSR有问题 React 版本 16 x 和 React 入门套件 更