Reactjs 反应挂钩-防止重新渲染,但对新道具进行操作

Reactjs 反应挂钩-防止重新渲染,但对新道具进行操作,reactjs,Reactjs,我有一个显示web地图的组件。我需要将数据传入和传出贴图组件,但我永远不需要重新渲染它。我在react之外的地图上完成所有工作-直接使用地图库 使用功能组件和钩子,我如何传递道具,对它们进行操作,并从该组件中获取数据而无需重新提交?我尝试了useffect()和memo()的组合,但它们最终取消了彼此的使用: 我使用useEffect监视相关道具和备忘录阻止渲染的更改,但由于备忘录阻止渲染,并且useEffect仅在渲染后激发,因此我无法在此组件中处理道具更新 const Map = memo(

我有一个显示web地图的组件。我需要将数据传入和传出贴图组件,但我永远不需要重新渲染它。我在react之外的地图上完成所有工作-直接使用地图库

使用功能组件和钩子,我如何传递道具,对它们进行操作,并从该组件中获取数据而无需重新提交?我尝试了
useffect()
memo()
的组合,但它们最终取消了彼此的使用:

我使用useEffect监视相关道具和备忘录阻止渲染的更改,但由于备忘录阻止渲染,并且useEffect仅在渲染后激发,因此我无法在此组件中处理道具更新

const Map = memo(props => {
  useEffect(() => {
    // run this on props update
    console.log(props.selectedImg);
  }, [props.selectedImg]);

  //... map lib specific code using props

  return <div id="mapDiv" />;
  }, 
  //prevent all rerenders using memo..
  () => true
);

const Map=memo(props=>{
useffect(()=>{
//在道具上运行此更新
console.log(props.selectedImg);
},[props.selectedImg]);
//…使用道具映射特定于库的代码
返回;
}, 
//使用备忘录防止所有重新提交。。
是的
);
这不起作用,因为备忘录阻止重新渲染,所以即使道具更新,useEffect也不会触发

如何使用钩子处理道具,同时完全防止该组件重新渲染?也许这种结构根本不正确


谢谢你的帮助

您可以使用AJAX传入和传出数据吗?这样组件就不会重新渲染。这是一个好问题。这是一种解决方法,但是如果地图元素本身不必重新渲染或接收道具,您是否尝试过将
#mapDiv
分离到它自己的组件中,并防止在该组件上重新渲染?不确定这是否会导致地图库出现问题。请尝试删除以下内容:
//防止所有使用memo的重新加载程序。。()=>true
因为它总是返回true,这意味着下一步和旧道具是相等的。@Rikin我需要在那里返回true,以防止重新渲染。@ShaneLoeffler我想你可以在调用中比较你想要的道具值,如果
选择了edimg
更改,有条件地返回false