javascript - React 在组件之间共享数据而无需重新加载组件
问题描述
我有一个地图组件,用户将在其中选择图像和侧面的另一个组件以使用选择中的数据。但是,当我在地图组件上设置上下文时,它会重新加载并重置地图。- 我将如何阻止此组件重新加载,或使用一种方法来共享此数据而不触发重新加载?
示例使用缩放按钮/鼠标滚轮查看重置问题。
我认为这样做的方法是使用上下文组件,并将函数作为值传递给提供程序
import React, { useState, createContext } from "react";
export const ImageContext = createContext();
export const ImageProvider = (props) => {
const [images, setImages] = useState([]);
return <ImageContext.Provider value={[images,setImages]} >
{props.children}
</ImageContext.Provider>;
};
将我的应用程序包装在contextprovider
(组件是兄弟姐妹,而不是子父关系)
return (
<div id="App">
<ImageProvider>
...
<SidePanel />
<WebMapView />
...
</ImageProvider>
</div>
);
}
我导入到我mapcomponent
的上下文中,Usecontext
如下所示
import { ImageContext } from "./ImageContext";
const [images, setImages] = useContext(ImageContext);
然后在用户输入地图时设置如下上下文
export const WebMapView = () => {
...
setImages(results.features);
...
}
问题描述:
- 我需要在地图上获取选择数据并将其传递给
sidecomponent
每次用户在不重新加载地图的情况下进行输入时,但在sidepanel
状态下新数据可用时保持反应重新加载的正常功能 - 我需要将信息从地图传递
sidepanel
到mapcomponent
地图中的处理,但无需重新加载地图。
我开始觉得印象上下文不是正确的工具,我应该使用其他东西吗?我已经研究了 shouldComponentUpdate 和purecomponents
,但文档指出它们是更多的“建议”并且不能保证防止重新加载......
解决方案
推荐阅读
- javascript - 新节点不尊重 D3.js forceSimulation() 中的力
- cypress - 赛普拉斯:将值存储在变量中
- c# - 使用 IComparer 基于多个字段进行排序
- python - 可以使用以数字开头的 key=argument 格式化文本吗?
- java - 在 Tomcat 9 的日志文件中捕获 System.out.println?
- pokeapi - Pokeapi 获得多种口袋妖怪类型
- excel - 有没有办法使用 v 查找或具有重复查找但不同行值的不同公式?
- image - 使用 bolbs (php) 在数据库中插入和显示图像
- python - 如何使用 pytest 测试 numba 矢量化函数
- java - 单元测试无限重复通量