javascript - slate js:如何在悬停时突出显示具有相同标记的相邻组件?
问题描述
// 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(或类似)中的高亮状态,并在状态更改时更新每个评论组件。但这看起来有点矫枉过正。
解决方案
import React from "react";
import ReactDOM from "react-dom";
import "./styles.css";
function App() {
const [back, setback] = React.useState(false);
const changeback = value => {
setback(value);
};
return (
<React.Fragment>
<CommentHighlight change={back} changeit={e => changeback(e)}>
aaa
</CommentHighlight>
<CommentHighlight change={back} changeit={e => changeback(e)}>
aaa
</CommentHighlight>
</React.Fragment>
);
}
function useMouseOver(changeit) {
const [mouseOver, setMouseOver] = React.useState(false);
return {
mouseOver,
triggers: {
onMouseEnter: () => {
setMouseOver(true);
changeit(true);
},
onMouseLeave: () => {
setMouseOver(false);
changeit(false);
}
}
};
}
// mark component
function CommentHighlight({ attributes, children, ...props }) {
const { mouseOver, triggers } = useMouseOver(props.changeit);
return (
<span
{...attributes}
{...triggers}
style={{
background: props.change ? "yellow" : "blue",
cursor: "pointer"
}}
>
{children}
</span>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
我不知道这是否是你正在寻找的方法,但是当你将鼠标悬停在第一个 CommentHighlight 上时,第二个会改变颜色,反之亦然
推荐阅读
- mongodb - MongoDB - 按不同字段聚合然后每天计数
- laravel - @foreach 中的@include,继续使用集合的第一个元素
- android - 如何将选中的项目添加到我的数组列表中?
- jquery - 在模态表单中使用 Spring Boot 和 thymeleaf 进行服务器端验证
- wordpress - 如何在许多 php 类中使用独白
- sql - SQL Server 创建函数
- php - Apache 提供一些带有 html 内容的图像
- php - Laravel 查询返回未找到的列
- c# - Git add --verbose 输出未在 Powershell 详细流中捕获
- java - 通过收集特定时间之间的订单列表向客户发送电子邮件