React Router Link 不适用于 LeafletJS

2024-01-12

版本:

  • 反应路由器-dom 4.1.1
  • 反应路由器-redux 5.0.0-alpha.4
  • 反应传单 1.1.3
  • 传单1.0.3

重现步骤

我创建了一张传单地图。我在其中添加了一些标记。这些标记有弹出窗口。 在每个弹出窗口中我想要一个<Link>

另外,如果有帮助的话,这是我的路由配置:

ReactDOM.render(
  <Provider store={store}>
    <div>
      <AppContainer />
      <ConnectedRouter history={history}>
        <div>
          <MenuContainer />
          <Switch>
            <Route path='/:area/:sport/list' component={ListContainer} />
            <Route path='/:area/:sport/map' component={MapContainer} />
            <Route path='/:area/:sport/rasp' component={RaspContainer} />
            <Route path='/:shortcode/details' component={StationDetailsContainer} />
            <Redirect exact from='/' to='/wellington/paragliding/list' />
            <Route component={NoMatch} />
          </Switch>
        </div>
      </ConnectedRouter>
    </div>
  </Provider>,
  document.getElementById('root')
)

预期行为

我可以看到我的链接,并在弹出窗口打开时单击它。

实际行为

Actual behaviour Impossible to see the link. It's not generated.

额外细节

Inside my <MapMode> I use <Map> from leaflet. If I set a <Link> just above the <Map> tag it works. As soon as I want to have a link inside my <Map>, somehow it breaks. This is the React structure of my page, <Popup> tag just contains null as Javascript is breaking: React structure

这是一个相当复杂的问题,所以请随时问我问题。 谢谢。


我尝试了 Tharaka 建议的解决方案,但它对我不起作用。看起来react-leaflet的Popup正在使用它自己的上下文,从而阻止了从更高级别传递的上下文。然而,受这个解决方案的启发,我想出了另一个解决方案,非常简单并且基于组合原理。

我创建了 RouterForwarder 组件

import React, { Component } from 'react'
import PropTypes from 'prop-types'

class RouterForwarder extends Component {
  getChildContext() {
    return this.props.context
  }

  render() {
    return <span>{this.props.children}</span>
  }
}

RouterForwarder.childContextTypes = {
  router: PropTypes.object.isRequired,
}

RouterForwarder.propTypes = {
  context: PropTypes.object.isRequired,
}

export default RouterForwarder

然后在我的组件(渲染地图、标记、弹出窗口和链接的组件)中按以下方式使用它:

import RouterForwarder from './RouterForwarder'

class MyComponent extends Component {

  render() {
    return (
    ...
      <Popup>
        <RouterForwarder context={this.context}>
          <Link to={'my destination'}>Go to My Destination</Link>
        </RouterForwarder>
      </Popup>
    ...)
  }
}

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

React Router Link 不适用于 LeafletJS 的相关文章

  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 使用 CryptoJS 更改密钥 [重复]

    这个问题在这里已经有答案了 我正在使用 CryptoJS 来加密和解密文本 在这里 我只是获取消息并显示加密和解密消息 我使用DES算法进行加密和解密 这是我的 HTML 文件
  • 即使我可以监视其他方法,也无法监视事件处理程序

    我想使用 Jest Jasmine Enzyme 测试 React 中的事件处理程序 MyComponent js import React from react class MyComponent extends React Compon
  • 如何在React中的Material-UI选择框中设置默认值?

    我在用选择框 https material ui com demos selects 来自材料用户界面 我想显示默认选择的 选择值 选项 但之后用户无法选择此选项
  • Google Chrome 106 可拖动导致元素消失

    使用拖放元素时 绝对定位元素中包含的大多数其他元素都会从屏幕上消失 如果我调整窗口大小 这些元素会出现 但在开始拖动时会再次消失 我在最新版本的 Google Chrome 106 和 Beta 版本 107 0 5304 18 以及现在的
  • 如何流式传输 OpenAI 的完成 API?

    我想流式传输结果通过 OpenAI 的 API 完成 https beta openai com docs api reference completions 该文档提到使用服务器发送的事件 https developer mozilla
  • 是否有任何非轮询方式来检测 DOM 元素的大小或位置何时发生变化?

    很长一段时间以来 我一直在寻找一种方法来检测 DOM 元素的大小或位置何时发生变化 这可能是因为窗口调整了大小 或者因为向该元素添加了新的子元素 或者因为在该元素周围添加了新元素 或者因为 CSS 规则已更改 或者因为用户更改了浏览器的字体
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 如何使JavaScript函数在Eclipse“大纲视图”中可见?

    我有这样的代码 但如果它在匿名函数中定义 则无法打开函数大纲 类没有问题 我该如何概述something2 请分享一些提示 我可以将所有函数标记为构造函数 但这是无效的方法 start of track event required deb
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • Twitter 嵌入时间轴小部件

    我继续下载http platform twitter com widgets js http platform twitter com widgets js And the http platform twitter com embed t
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • Redux-saga 从操作中获取数据返回patternOrChannel 未定义

    我需要将动态数据从屏幕发送到操作 减速器 并使用该数据从 API 获取数据 但是当我在我的rootSaga我会收到这样的错误 在检查 take patternOrChannel 时未捕获 patternOrChannel 未定义未捕获在 r
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件

随机推荐

  • 被释放的指针未分配用于指针分配

    我试图将 ListNode 结构更改为类格式 但在测试它时遇到了一些问题 获取 a out 7016 malloc 对象 0x7fff65333b10 的错误 正在释放的指针未分配 在malloc error break中设置断点进行调试
  • 如何使用 GDB 在 Android 上调试 Dalvik 可执行文件?

    我想使用GDB调试Android应用程序 我没有源代码并且我习惯了GDB 有人知道该怎么做吗 看来我需要附加到应用程序的进程并使用 gdbserver 但我还没有真正找到关于如何做到这一点的好教程 Thanks 可能没有分步教程 但人们一直
  • gcc5.1的新libstdc++可能会分配大堆内存

    valgrind 在使用 gcc5 1 编译的空程序中检测到 仍然可达泄漏 g a cpp int main 瓦尔格林德说 valgrind a out 32037 HEAP SUMMARY 32037 in use at exit 72
  • JEdi​​torpane 与 JTextPane

    我必须为我的大学创建一个 java swing 项目 java 文件的编辑器 具有适当的文本突出显示 即不同的颜色和字体java关键字 java注释并为普通文本 帮助我选择两种样式的文本组件之一J编辑器面板 and 文本窗格由java提供
  • Vue.js 未知的自定义元素

    我是 Vue js 的初学者 我正在尝试创建一个可以满足我的日常任务的应用程序 并且我遇到了 Vue 组件 下面是我尝试过的 但不幸的是 它给了我这个错误 vue js 1023 Vue warn 未知的自定义元素 你是吗 正确注册组件 对
  • 如何在 json 数组中搜索值,然后如果找到值则删除索引

    我得到了这个 json 字符串 我需要解析它并从中删除数据 但我不确定如何处理它 假设我有以下 json
  • 尝试使用 where 条件进行选择时出现“错误请求:无法限制 PRIMARY KEY 部分 to_id”

    这是我的聊天应用程序的 cassandra 表 CREATE TABLE tax keyspace dev chat messages message text when timestamp from id text to id text
  • MvcContrib 便携式区域查看 Intellisense?

    我已经开始使用 MvcContrib 项目中的可移植区域 除了 Visual Studio Intellisense 之外 一切都运行良好 有没有人能够让他们的 View intellisense 工作 html 我也无法在同一项目中创建的
  • 忽略异步任务方法的返回值

    场景如下 在我的 WPF 应用程序中 我希望保持一个始终运行的循环来执行各种操作 我想到了这种模式 void MainWindow OnLoaded object sender RoutedEventArgs e SomeProcessAs
  • asyncio 可等待对象 - 基本示例

    我试图了解如何制作一个可等待的对象 定义来自文档 https www python org dev peps pep 0492 await expression states 具有返回迭代器的 await 方法的对象 在该定义的指导下 我编
  • 如何在同一个 println“System.out.println”中打印这两个变量

    我有两个int变量 abdou1 and abdou2 我希望打印这些值 我在下面尝试过 但不起作用 public class Math1 public static void main String args int abdou1 115
  • 忽略 testng 中的一个类

    当我运行我的 testng 套件时 有一些测试类需要被忽略 我尝试对需要忽略的类和方法使用 Test enabled false 注释 但我的问题是 需要忽略的类扩展了一个抽象类 并且即使我在基类上有 Test enabled false
  • Hello world 不在 IntelliJ Idea 中运行

    我使用 Eclipse 工作了很多年 决定尝试 IntelliJ Idea 后 Bua 也简单的 java Hello World 无法运行 这根本就是什么也没发生 我应该检查 调整什么 谢谢 package test Created wi
  • Sublime Text 3 subl 命令在 Windows 10 中不起作用

    当我运行 subl 命令时 它只是暂停了一会儿 没有给我任何关于发生了什么的反馈 也没有打开 我目前在 Windows 10 上运行最新的 Sublime Text 3 版本 我已经将 subl exe 从 sublime text 3 目
  • 方法重复输出

    对 sling 和 Java 来说还很陌生 所以我提前道歉 但是有人知道为什么当我在根目录时它会输出 我的路两次 奇怪的是它只发生在绝对根处 public static String generateTest Page page Page
  • 如何让所有网络流量都通过代理?

    我有一个向远程服务器发出 http 请求的应用程序 我使用以下代码执行此操作 HttpClient httpClient new DefaultHttpClient HttpPost httpPost new HttpPost myURL
  • 如何将十进制时间转换为 POSIX 时间

    我使用一个函数从这里 http www r bloggers com approximate sunrise and sunset times 计算日出和日落并返回 sunrise sunset 6 49055593325792 18 28
  • 在 LayoutMode=Grid 中使用 LongListSelector 进行延迟加载

    我正在 WP8 上的 LongListSelector 中显示图像集合 并且我已经实现了众所周知的延迟加载模式 http www damirscorner com InfiniteScrollingWithIncrementalLoadin
  • “类型错误:列表索引必须是整数或切片,而不是浮点数”

    我是Python新手 我想做的是计算浮点数之间的差异 之后的数字和之前的数字之间必须存在差异 所以第一个差异必须是第二个数字和最后一个数字之间 这是我的代码 x 811 91 796 04 796 14 796 50 796 81 i 0
  • React Router Link 不适用于 LeafletJS

    版本 反应路由器 dom 4 1 1 反应路由器 redux 5 0 0 alpha 4 反应传单 1 1 3 传单1 0 3 重现步骤 我创建了一张传单地图 我在其中添加了一些标记 这些标记有弹出窗口 在每个弹出窗口中我想要一个 另外 如