OnMouseEnter в React для нескольких divs не работает должным образом

#reactjs #target

#reactjs #цель

Вопрос:

У меня проблема с OnMouseEnter в React. Я хочу развернуть только одну карту, и когда я навожу курсор на одну из них, каждая из них раскрывается одновременно. Пожалуйста, помогите.

 export default function Modules() {

  const [isShown, setIsShown] = useState(false);

  return (
    <>
      <h5>title</h5>
      <Card>
        <div
          onMouseEnter={() => setIsShown(true)}
          onMouseLeave={() => setIsShown(false)}
        >
        <p>Tele</p>
        {isShown amp;amp; (
          <div onMouseEnter={() => setIsShown(true)} onMouseLeave={() => setIsShown(false)}>
         <p>Logo</p>
         </div>
         </div>
        )}
      </Card>
           <h5>Title2</h5>
      <Card>
        <div
          onMouseEnter={() => setIsShown(true)}
          onMouseLeave={() => setIsShown(false)}
        >
        <p>Tele</p>
        {isShown amp;amp; (
          <div onMouseEnter={() => setIsShown(true)} onMouseLeave={() => setIsShown(false)}>
         <p>Logo</p>
         </div>
         </div>
        )}
      </Card>```
 

Ответ №1:

Это происходит потому, что вы используете одно и то же состояние. Если значение ifShown равно true, все карты будут отображаться .. Вы можете создать независимый компонент Card, который управляет своим собственным состоянием.

 export const CardWrapper = ({ title}) => {
   const [isShown, setIsShown] = useState(false);

   return (
      <>
      <h5>{title}</h5>
      <Card>
        <div
          onMouseEnter={() => setIsShown(true)}
          onMouseLeave={() => setIsShown(false)}
        >
        <p>Tele</p>
        {isShown amp;amp; (
          <div onMouseEnter={() => setIsShown(true)} onMouseLeave={() => setIsShown(false)}>
         <p>Logo</p>
         </div>
         </div>
        )}
      </Card>
   )
}
 

Затем используйте его в своем компоненте Modules. Теперь каждая карта управляет своим собственным состоянием независимо. Я передаю заголовок только как реквизит, потому что не знаю, что вам нужно использовать внутри вашей карты.

 export default function Modules() {
   return (
      <CardWrapper title="title1" />
      <CardWrapper title="title2" />
   )
}