我有这样一个组件:(代码沙盒:https://codesandbox.io/s/boring-platform-1ry6b2?file=/src/App.js)
绿色的部分是div。这是我的代码:
import { useState } from "react";
import "./styles.css";
export default function App() {
const [insideApp, setInsideApp] = useState(false);
return (
<div onFocus={() => setInsideApp(true)} onBlur={() => setInsideApp(false)}>
<div className="App">
<input className="input" />
{insideApp && <button>Show Button</button>}
</div>
<p>Out of Box content</p>
</div>
);
}
/* css */
.App {
display: flex;
border: 2px solid aqua;
align-items: center;
column-gap: 2vw;
padding: 2rem;
}
.App:focus-within {
border: 2px solid lime;
}
.input {
flex: auto;
}
理想情况下,当我通过选项卡导航到按钮时,它应该突出显示,如下所示:
然而,由于我有条件地渲染按钮,我失去了焦点。有人能帮我想出一些创新的想法来实现同样的目标吗?我希望div在聚焦时变成石灰色,然后做一个标签导航,这样它就可以检测输入和按钮。
此外,我希望按钮只显示时,重点是在div。
2条答案
按热度按时间kulphzqa1#
查看合成事件https://reactjs.org/docs/events.html
有两个事件
onMouseEnter
和onMouseLeave
,您可以使用这两个事件来突出显示div和隐藏按钮。deyfvvtc2#
你可以使用普通的CSS来处理所有的过程:
CSS:
说明:
1.使用
:focus-within
来有条件地显示按钮1.禁用
button
元素的光标事件,并将其隐藏为默认值以防止交互1.启用光标事件并在
:focus-within
激活时显示button