简体   繁体   English

如何在鼠标进入/离开事件中呈现React.Component

[英]How to render React.Component on mouse enter/leave events

Have a problem with rendering react component on onMouseEnter , onMouseLeave events in the list of items 在项目列表中的onMouseEnteronMouseLeave事件上渲染react组件时onMouseEnter问题

I have a list of items 我有一个项目清单

const [isHover, setHover] = useState(false)
...
{data.categories.map((item) => (
  <>
    <li
      key={item.id}
      className="list-item"
      onMouseEnter={() => {
        setHover(true);
      }}
      onMouseLeave={() => {
        setHover(false);
      }}
    >
      <NavLink
        to={`/catalogues/${item.name_parameterized}`}
        className="list-item-link"
        activeClassName="active"
      >
        {item.name}
      </NavLink>
    </li>
    {isHover && <SubCategory data={item.children} />}
  </>
))}

Need to show SubCategory Component with different data on the onMouseLeave / onMouseEnter events on the every li 需要在每个li上的onMouseLeave / onMouseEnter事件上显示SubCategory Component with different dataonMouseLeave onMouseEnter
If i do something like this 如果我做这样的事情

<ul>
<li>
...
isHover && <SubCategory>
<li>
<ul>

I see that <SubCategory> shown items.length times but I need to show only one <SubCategory> for hovering li only 我看到<SubCategory> items.length <SubCategory>显示了items.length次,但我只需显示一个 <SubCategory>仅用于悬停li

Expected result is how on the Walmart site subcategories shown 预期结果是沃尔玛现场子类别的显示方式

In other words you need a different state for each element, therefore you also need a Component for each: 换句话说,每个元素都需要不同的状态 ,因此每个元素还需要一个Component:

function ShowOnHover({ item }) {
  const [isHover, setHover] = useState(false);

  return (
   <>
     <li
      key={item.id}
      onMouseEnter={() => setHover(true)}
      onMouseLeave={() => setHover(false)}
     >
     <NavLink
      to={`/catalogues/${item.name_parameterized}`}
      className="list-item-link"
      activeClassName="active"
     >
      {item.name}
     </NavLink>
    </li>
    {isHover && <SubCategory data={item.children} />}
    </>
   );
}

Then use that component as: 然后使用该组件:

data.categories.map((item) => <ShowOnHover item={item} />)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM