// utility hook
function useMouseOver() {
const [mouseOver, setMouseOver] = useState(false);
return {
mouseOver,
triggers: {
onMouseEnter: () => setMouseOver(true),
onMouseLeave: () => setMouseOver(false),
},
};
}
// mark component
function CommentHighlight({ attributes, children, ...props }) {
const { mouseOver, triggers } = useMouseOver();
return (
<span
{...attributes}
{...triggers}
style={{
background: mouseOver ? yellow[600] : yellow[200],
cursor: 'pointer',
}}
>
{children}
</span>
);
}
想象一下 2 条重叠的评论,它们有不同的标记,但使用相同的组件呈现CommentHighlight
:
-----
---------
aaaccbbbbbbb
a
- 有评论 1 的标记b
- 有评论 2 的标记c
- 有评论 1 和 2 的标记
当我将鼠标悬停在上方时,aaa
我也需要cc
更改颜色。但是怎么做?
我唯一的猜测是跟踪 redux(或类似)中的高亮状态,并在状态更改时更新每个评论组件。但这看起来有点矫枉过正。