Наведение применяется ко всем элементам при наведении на один? Попутный ветер

Я не уверен, почему наведение применяется ко всем элементам при наведении на один элемент.

 {isClicked && ( 
            <div className='bg-slate-400 text-white p-6 absolute before: top-7 before: -left-7 flex flex-col gap-2 justify-center'>
                {countries.map((country, index) => (
                        <p 
                            key = {index}
                            className='hover:scale-110 hover:underline'
                        >
                            {country}
                        </p>
                ))}
            </div>)}

Итак, я изменил стиль при наведении:

  <div className='bg-slate-400 text-white p-6 absolute before: top-7 before: -left-7 flex flex-col gap-2 justify-center'>
                <h3>All UK</h3>
                {countries.map((country, index) => (
                        <p 
                            key = {index}
                            className='hover: bg-slate-800'
                        >
                            {country}
                        </p>
                ))}
            </div>)}

И теперь наведение применяется ко всем элементам p, даже если я не наводил на них курсор.

Почему происходит? Что изменить, чтобы наведение применялось только к одному элементу, на который наведен курсор?

И если название страны содержит 2 слова, второе слово переносится на новую строку. Я продолжал менять ширину и высоту, но все еще происходит. Я видел в документе попутного ветра использование пробела-nowrap, но он влияет на все элементы и отображается в строке, а не в столбце, все направления гибкости теста в столбце.

Весь компонент:

import React, { useState } from 'react'

const countries = ['England, Scotland, Wales, NorthemIreland']

const Location = () => {
    const [loc, setLoc] = useState({country: '', region: ''})
    const [isClicked, setIsClicked] = useState('false')

    return (
        <div 
            className='text-white relative'
            onClick = {() => setIsClicked(!isClicked)}
            >
         Location
         {isClicked && ( 
            <div className='bg-slate-400 text-white p-6 absolute before: top-7 before: -left-7 flex flex-col gap-2 justify-center'>
                <h3>All UK</h3>
                {countries.map((country, index) => (
                        <p 
                            key = {index}
                            className='hover: bg-slate-800'
                        >
                            {country}
                        </p>
                ))}
            </div>)}
        
        </div>
    )
}

export default Location

Думаю, что баг от попутного ветра и не реагирует. возможно, это просто опечатка hover: bg-slate-100 не должно быть пробела между ними. так что правильная версия hover:bg-slate-100

Laaouatni Anas 02.04.2023 12:38
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
REACT и NEXT JS вместе с Tailwind CSS
REACT и NEXT JS вместе с Tailwind CSS
Наличие собственного или персонального сайта необходимо в современном мире, а сочетание React и Next JS позволяет разработчику сделать это за меньшее...
Современные подходы к организации и работе с CSS в проекте
Современные подходы к организации и работе с CSS в проекте
Любой, кто писал CSS в течение некоторого времени, знает о сложностях, которые с этим связаны, и о том, насколько это может быть болезненно.
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Как использовать псевдокласс :hover в Tailwind только тогда, когда это действительно необходимо (при наличии курсора)
Я люблю Tailwind. Раньше я относился к нему с подозрением, но как только я попробовал его использовать, я был поражен тем, сколько времени он мне...
0
1
76
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

это потому, что вы использовали функцию карты и используете onclicked, который относится ко всем значениям, которые вы сопоставили, поэтому все значения зависли

  1. Изменить hover: bg-slate-800 на hover:bg-slate-800

  2. Убедитесь, что индекс уникален для каждого элемента списка, попробуйте console.info(index). Чтобы проверить, имеет ли элемент уникальный индекс.

  3. Чтобы страна с более длинным именем не переходила на следующую строку. Используйте whitespace-nowrap

    Пример:

    <div class = "before: before: absolute -left-7 top-7 m-4 flex flex-col justify-center gap-2 bg-slate-400 p-6 text-white">
     <h3>All UK</h3>
    
     <p key = "1" class = "whitespace-nowrap hover:bg-slate-800">India</p>
     <p key = "2" class = "whitespace-nowrap hover:bg-slate-800">Australia</p>
     <p key = "3" class = "whitespace-nowrap hover:bg-slate-800">West Indies</p>
     <p key = "4" class = "whitespace-nowrap hover:bg-slate-800">SOth America</p>
     <p key = "5" class = "whitespace-nowrap hover:bg-slate-800">Very long country name</p>
    </div>
    

Выход:

Снимок экрана был сделан без захвата указателя мыши

Да. Это было из индекса. Я консольно записываю значение индекса, и оно было 0, а страна - все страны. Я изменил страны на массив объектов, и это сработало. Спасибо

Erika 02.04.2023 12:52
Ответ принят как подходящий

Единственная проблема, которую я вижу в вашем коде, - это использование класса попутного ветра в ваших элементах HTML, служебный класс попутного ветра следует использовать без пробела.

Ваше использование класса:

// wrong implementation
  <p key = {index} className='hover: bg-slate-800'>{country}</p>

// Right implementation
<p key = {index} className='whitespace-nowrap hover:bg-slate-800'>{country}</p> 

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

// This
const countries = ['England, Scotland, Wales, NorthemIreland']

// To This
const countries = ["England", "Scotland", "Wales", "Northen Ireland"];

Кроме того, я видел, что вы используете логическое состояние в виде строки, что приведет к сбою при обновлении состояния isClicked.

// This
const [isClicked, setIsClicked] = useState('false')

// TO This
const [isClicked, setIsClicked] = useState(false)

Чтобы лучше работать с попутным ветром, попробуйте установить расширение попутного ветра, если вы используете редактор vscode.

Надеюсь, что это работает для вас :)

Другие вопросы по теме