javascript - Tooltip 传单的动态永久属性
问题描述
我试图在Legend
组件悬停时显示工具提示。为此,我有一个Father
带有钩子的组件,以便将数组的索引useState
传递给 Leaflet组件,并在这些索引相等时更改属性。Map
Location
Permanent
const permanent = i === showLocationPosition;
这showLocationPosition
是悬停位置的索引,通过道具获取其Father
组件。
<Marker
position={[position[0], position[1]]}
key={index}
icon={divIcon({ className: 'marker-dot dot-hover', html: ReactDOMServer.renderToString(stringHTML), iconSize: [30, 30] })}
>
<Tooltip direction="bottom" opacity={1} offset={new Point(xPoint, 10)} permanent={permanent}>
<div className={`popup-container-header ${item.count ? 'w-80' : 'w-40 text-center'}`}>
<p className="w-full">
{type_of_country_operation ?? item.name}
</p>
{item.count && <p>{item.count}</p>}
</div>
{item.summary && <p className="popup-container-main">{item.summary}</p>}
</Tooltip>
</Marker>
我可以验证permanent
变量是否发生了变化,但Tooltip
没有出现。
有什么建议吗?谢谢!
解决方案
更改permanent
没有帮助的原因是因为底层传单选项被react-leaflet视为不可变的。因此,即使您showLocationPosition
可能会更改(哪些更改permanent
),工具提示已经创建并且不会响应该道具中的更改。
一种快速而肮脏的方法是也使用工具提示上的道具key
,它可以是索引和永久状态的组合:
<Tooltip {...otherProps} key={`${index}-${permanent}`}>
当永久值更改时,这将强制重新呈现该工具提示组件。
我会考虑一种不同的方法。如果您不需要在鼠标悬停其来源时也呈现工具提示,只需根据以下条件有条件地呈现它:Marker
permanent
<Marker {...markerprops}>
{permanent && <Tooltip direction="..." offset={...} permanent={permanent}>
{stuff}
</Tooltip>}
</Marker>
您可能希望将名称更改为permanent
其他名称,例如currentOpenTooltip
. 现在,如果您还希望在用户将鼠标悬停在标记上时正确打开和关闭工具提示,则需要为此添加条件。您可以使用状态变量来跟踪Marker
鼠标悬停的内容,并使用事件处理程序来控制该状态变量。
const Father = () => {
const [currentlyMousedOverMarker, setCurrentlyMousedOverMarker] = useState(-1);
return (
<MapContainer>
{markersData.map((marker, index) => {
<Marker
{...markerprops}
eventHandlers={{
mouseenter: () => { setCurrentlyMousedOverMarker(index) },
mouseleave: () => { setCurrentlyMousedOverMarker(-1) }
}}
>
{permanent || currentlyMousedOverMarker === index &&
(
<Tooltip permanent={permanent || currentlyMousedOverMarker}>
{stuff}
</Tooltip>
)
}
</Marker>
})}
</MapContainer>
)
}
显然,此代码示例已简化并且不包含您已经拥有的任何逻辑,但这只是为了让您了解只有在任一条件为真permanent
时才应呈现工具提示。
推荐阅读
- html - justify-content 不在项目之间创建空间
- angular - Angular:“AbstractControl”缺少“FormControl”类型的以下属性:registerOnChange、registerOnDisabledChange、_applyFormState
- php - 为什么“未定义的偏移量”在一台机器上引发异常,但在另一台机器上显示通知?
- excel - VB中更改字体的if语句
- java - 用于 Map 的 Jackson 自定义 KeyDeserializer,不包括 key 为 null 的条目
- javascript - keycloak-js 适配器手动添加令牌
- reactjs - 是的,使用 Formik 进行条件验证
- c++ - 固定,设置精度函数
- python - 从大字符串列表中创建新的字符串列表
- python - Python/机器学习 - 线性回归,TypeError:'list' 对象不可调用