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