使用react和mapbox gl或maplibre gl动态加载标记

2024-03-01

我正在学习 React。我想显示一张地图,在该地图上动态显示和隐藏标记。这有效。我用Maplibre GL https://github.com/maplibre/maplibre-gl-js,这是一个分叉地图盒 GL https://docs.mapbox.com/mapbox-gl-js/api/并且处理方式是一样的。

然而不幸的是,当标记发生更改时,地图会重新加载,因为在useEffect-钩。然而,如果没有它,标记就不会改变。我无法访问外部的地图(变量地图)useEffect。 有什么可能性可以防止重新加载地图,但可以动态调整标记。

这是我的代码:

import React from "react";
import maplibregl from "maplibre-gl";

const App = () => {
  const pois = [
    {
      display_name: "backery a",
      icon: "https://nominatim.openstreetmap.org/ui/mapicons//shopping_bakery.p.20.png",
      lat: "50.4",
      lon: "7.1",
      importance: "0.111",
      geojson: '{"type":"Point","coordinates":[7.1,50.4]}',
      place_id: "1",
    },
    {
      display_name: "backery b",
      icon: "https://nominatim.openstreetmap.org/ui/mapicons//shopping_bakery.p.20.png",
      lat: "51.4",
      lon: "6.1",
      importance: "0.211",
      geojson: '{"type":"Point","coordinates":[6.1,51.4]}',
      place_id: "2",
    },
  ];

  const [searchTerm, setSearchTerm] = React.useState(
    localStorage.getItem("search") || "backery a"
  );

  React.useEffect(() => {
    localStorage.setItem("search", searchTerm);
  }, [searchTerm]);

  const handleSearch = (event) => {
    setSearchTerm(event.target.value);
  };

  const searchedpois = pois.filter((poi) =>
    poi.display_name.toLowerCase().includes(searchTerm.toLowerCase())
  );

  return (
    <div>
      <h1>React Maplibre Map</h1>
      <Search searchValue={searchTerm} onSearch={handleSearch} />
      <hr />
      <List list={searchedpois} />
      <hr />
      <Map list={searchedpois} />
    </div>
  );
};

const Map = (props) => {
  React.useEffect(() => {
    const map = new maplibregl.Map({
      container: "map",
      style:
        "https://api.maptiler.com/maps/streets/style.json?key=mykey",
      center: [7.5, 50.1],
      zoom: 4,
    });

    map.on("load", () => {
      props.list.map((item) =>
        new maplibregl.Marker().setLngLat([item.lon, item.lat]).addTo(map)
      );
    });
  }, [props.list]);

  return <div></div>;
};

const Search = ({ searchValue, onSearch }) => (
  <div>
    <label htmlFor="search">Suche: </label>
    <input id="search" type="text" onChange={onSearch} value={searchValue} />
  </div>
);

const List = (props) => (
  <div>
    <table>
      <tbody>
        {props.list.map((item) => (
          <POI key={item.place_id} poi={item} />
        ))}
      </tbody>
    </table>
  </div>
);

const POI = ({ poi }) => (
  <tr key={poi.place_id}>
    <td>{poi.display_name}</td>
    <td>{poi.lat}</td>
    <td>{poi.lon}</td>
    <td>{poi.importance}</td>
    <td>
      <img alt="" src={poi.icon} />
    </td>
  </tr>
);

export default App;

None

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

使用react和mapbox gl或maplibre gl动态加载标记 的相关文章

  • VSCode 不会从 Next.js 项目中的“react”自动导入

    This is not的副本这个问题 https stackoverflow com questions 71476308 how to stop vs code importing react methods from minified
  • Azure无法访问React Web应用程序中的env变量

    几年前我看到有一个类似的问题 但超链接答案已被微软关闭 我有一个使用 create react app 创建的 React 应用程序 它已经部署到heroku并加载一些环境变量来访问谷歌地图等 这一切对于heroku来说都工作得很好 我已经
  • GraphQL - POST 正文丢失。您忘记使用 body-parser 中间件了吗?

    我的电脑上不断出现以下错误graphql查询但不确定原因 POST body missing Did you forget use body parser middleware 我在这里做了什么奇怪的事吗 我已经尝试了在线 body par
  • 将 ESLint 与 Airbnb 样式和选项卡结合使用 (React.js)

    我正在开发一个 React js 应用程序 并且正在尝试检查我的代码 我将 ESLint 与 Airbnb 风格一起使用 但出现以下错误 src Test jsx 4 2 error Unexpected tab character no
  • React TypeError:x 不是函数

    我在子组件中从父组件调用函数 booksRefresh 但出现错误 类型错误 booksRefresh 不是函数 我不知道为什么 因为 booksRefresh 是一个函数 有人可以帮我解释为什么会出现这个错误吗 这是我的代码 import
  • 需要根据用户选择有条件地渲染具有 X 行数的部分

    我有一个反应组件 其中包含一个下拉列表 其中的选项包括none 1 5 and 13 根据用户选择的数字 我需要渲染一个部分 其中包括许多行 每个行都有字段名称和下拉列表 如果用户不选择任何一个 我需要整个附加配置部分消失 新部分中的每个下
  • Enzyme - 测试嵌套组件是否正确呈现

    我正在尝试测试当通过简单的布尔值更新状态时 在父组件中其子组件是否正确呈现 在父组件下面 class Parent extends Component render const isReady this state const props
  • 在 React JSX 中返回配对元素

    问题 在 React 中 您希望通过映射数组来创建 DOM 结构 但数组中的每个项目应返回 2 个元素 例如 import React from react import from lodash let Component React ex
  • 如何为React hooks(useState等)做流类型注解?

    我们应该如何将 Flow 类型注释与 React hooks 一起使用 例如useState 我尝试寻找一些如何实施它们的示例 但找不到任何东西 我试过这个 const allResultsVisible setAllResultsVisi
  • linux azure web 应用程序不显示我的reactjs 应用程序

    我使用 npx create react app 创建了一个 Reactjs Web 应用程序 并创建了一个 azure ci cd 管道以将构建文件夹推送到我的 Linux Web 应用程序实例 我还指定了启动命令 pm2 serve h
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • 在 React 中 npm start 期间意外导入令牌

    我正在学习 React 并创建了一个模拟项目 但是当我运行该项目时出现以下错误 我的 webpack config js 文件代码如下 module exports entry client js output filename bundl
  • WebpackError:ReferenceError:Gatsby 上未定义窗口

    我已经在互联网上进行了大量搜索 但无法解决这个问题 我正在使用 Gasby 开发静态页面 但遇到此错误 WebpackError ReferenceError window is not defined 我的线索是 这与我正在使用的引导 模
  • 使用 React JS 进行多个文件上传

    我试图弄清楚如何在 React JS 中循环多个文件上传 最终我希望能够循环遍历每个文件 以便我可以判断是否仅上传 PNG JPG 和 MP3 文件 我还希望 PNG JPG 文件限制为 5MB MP3 文件限制为 2MB 到目前为止 我不
  • React - 如何在react-select中设置默认值

    I used 反应选择 https github com JedWatson react select在我的应用程序中显示选择框 下面是我选择的代码
  • Redux 状态在窗口重新加载时重置(客户端)

    我有非常大且复杂的对象 例如 userInfo chatInfo 等 就像具有非常大且嵌套信息的对象和数组一样 每次刷新页面时 我的 React 应用程序都会重置 redux 状态 我必须再次调用所有这些 API 我对这个主题做了一些研究
  • React JS“this”没有按预期工作

    我有下面的代码 save function var this this console log this refs itemText this setState isEditing false function console log In
  • Hooks setState 总是落后一步

    我使用了 useState 钩子 应该在每次下拉按钮的值发生变化时触发设置状态方法 在钩子中 但设置状态总是落后一步 我已经看到了使用基于类的组件的传统 setState 方法的解决方案 但是如何使用钩子解决此问题useState
  • React - 在单个文件中导入多个 svgs

    我有多个 svg 文件 我想将所有这些文件导入和导出到一个文件中 icons js import IconVideoOn from assets img icons video on svg import IconVideoOff from
  • Mapbox 图标/标记“BearingSnap”或捕捉到位置

    有没有办法将图标 标记移动到某个位置 然后它会 捕捉 到该位置 例如 在计算机上的国际象棋游戏中 当您将棋子移动到正确的方格时 当您在方格附近 周围放开棋子时 它会捕捉到该位置 所以我想要的是将标记或图标移动到某个位置 比如说加利福尼亚州的

随机推荐

  • 减去具有不同时间戳的两个文档之间的数字字段

    假设我有这些数据样本 date 2019 06 16 rank 150 name doc 1 date 2019 07 16 rank 100 name doc 1 date 2019 06 16 rank 50 name doc 2 da
  • 为什么我的 KeyPressEvent 不能与右/左/上/下一起使用?

    在 C 中 我试图查看用户是否按下了正确的键 以便玩家向右移动 但是当我尝试时 它没有注册按键 private void KeyPressed object sender KeyPressEventArgs e if e KeyChar C
  • 与其活动相关的片段生命周期

    情况我的活动等待异步操作 在收到异步操作的回复后 它需要将信息传递给其中的 2 个片段 要求1 两个片段都需要它们的onCreateView为加载布局而进行的调用 2 他们需要全身心地投入到自己的活动中 以便getActivity work
  • 如何将 JUnit 测试用例导出到可执行的 .jar 中?

    我正在使用 Selenium 和 JUnit 来自动化一些测试 我希望能够将其导出到可运行的 jar 文件中 我无法做到这一点 我假设这是因为没有 main 方法 JVM 不知道要运行什么 我看到了这个帖子如何将 JUnit 测试套件导出为
  • 在 main() 之前、之后或内部声明函数有什么优点?

    我正在尝试学习嵌入式系统的C语言 目前我正在学习基础知识 但无法找到一个基本问题的答案 当我编写一个简单的 C 程序时 我用三种方式声明了一个名为 Maximum 的函数 我将通过以下示例进行解释 1 在下面的程序中 函数在 main 外部
  • 用于自动化的 User32 API 自定义 PostMessage

    我想用 C 自动化一个名为 Spotify 的程序 我认为 最好的方法是触发假按键 我想编程来暂停播放 但我对这个东西了解不够 无法找到按键以外的其他方法 因此 我使用 Visual Studio 的 Spy 来查看按下键盘上的播放按钮时
  • 当单词超过2亿时,如何使用Java去除重复单词?

    我有一个文件 大小 1 9 GB 其中包含 220 000 000 2 2 亿 个单词 字符串 它们有重复 几乎每 100 个单词就有 1 个重复单词 在我的第二个程序中 我想读取该文件 我成功使用 BufferedReader 逐行读取文
  • pitest 找不到测试

    我在 SonarQube 项目中遇到问题 我想计算一些有关测试质量的统计数据 我正在使用pitest 不幸的是 它没有找到任何变异的测试 这是pom xml我正在分析的模块
  • 在 Xcode 中禁用 AdMob 日志记录

    当我安装 Google Mobile Ads SDK cocoapod 时 我收到了大量日志记录 有些似乎完全无关 但不知何故 因为完全删除 Google Mobile Ads SDK pod 会删除所有日志记录 这是我所拥有的 Podfi
  • 捕获 log4j 输出

    我们正在使用log4j2广泛地存在于我们的系统中 并对其进行配置log4j2 xml 现在我需要一个可以运行的新应用程序jobs 我想单独捕获时间 X 和 Y 之间产生的所有日志并将其放入数据库中 我们框架的正常日志记录应该照常发生 记录到
  • jQuery .toggleClass() 速度

    我使用 jQuery toggleClass 函数 类将在每次点击时切换 效果完美 但我无法设置速度 我已经尝试过 databox toggleClass boxopened 7000 还有这个 databox toggleClass bo
  • Jenkins:Gerrit 触发器问题的设置

    我在 Jenkins 上安装了插件 Gerrit Trigger 因为当团队中的开发人员在存储库上推送某些内容 相对于特定项目 时 我需要自动启动构建 我按照这里的设置 https wiki jenkins ci org display J
  • 迭代对象的嵌套数组,查找 id 并更新与 id 匹配的对象

    我的输入如下 它是一个对象数组 每个对象都有状态 这也是一个对象数组 我想追加details当状态 id 与状态匹配时 在 states 对象内部id如以下所说的 IE 82175746 const input country id 877
  • Storyboard 中的 UIViewController Title 属性

    I am setting the title field of a UIViewController via Interface Builder Storyboard 该视图控制器嵌套在UINavigationController它又嵌套在
  • 使用 EF 在两个数据库之间复制记录

    我需要使用 EF 将数据从一个数据库复制到另一个数据库 例如 我有以下表关系 Forms gt FormVersions gt FormLayouts 我们在两个数据库中都有不同的表单 我们希望将它们收集到一个数据库中 基本上 我想从一个数
  • putback() 和 unget() 之间的区别

    我正在使用标准 iostream 从文件中获取一些输入 但我很困惑unget versus putback character 从文档中我看来这些功能实际上是相同的 其中unget 只记得输入的角色 所以我很紧张 我一直用putback c
  • Hazelcast 服务器作为 Linux 服务

    如何在生产环境中将 hazelcast 服务器作为 Linux 服务运行 java server cp hazelcast jar com hazelcast examples StartServer StartServer 运行服务器并输
  • 根据列名列表将数据表拆分为多个数据表

    我有一个如下所示的数据表 ID Country Supplier 515 DE A 515 CH A 515 FR A 516 DE B 516 FR B 517 DE C 517 IT C 我有一个List
  • PhantomJS 使用 QtWebKit 还是 Blink?

    PhantomJS CasperJS 是否使用 WebKit 或 Chromium 作为默认浏览器驱动程序 如果是WebKit 是直接WebKit还是qt或者gtk PhantomJS 基于 QtWebKit 常见问题解答说 问 Phant
  • 使用react和mapbox gl或maplibre gl动态加载标记

    我正在学习 React 我想显示一张地图 在该地图上动态显示和隐藏标记 这有效 我用Maplibre GL https github com maplibre maplibre gl js 这是一个分叉地图盒 GL https docs m