Я не уверен, почему наведение применяется ко всем элементам при наведении на один элемент.
{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
это потому, что вы использовали функцию карты и используете onclicked, который относится ко всем значениям, которые вы сопоставили, поэтому все значения зависли
Изменить hover: bg-slate-800
на hover:bg-slate-800
Убедитесь, что индекс уникален для каждого элемента списка, попробуйте console.info(index)
. Чтобы проверить, имеет ли элемент уникальный индекс.
Чтобы страна с более длинным именем не переходила на следующую строку. Используйте 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, а страна - все страны. Я изменил страны на массив объектов, и это сработало. Спасибо
Единственная проблема, которую я вижу в вашем коде, - это использование класса попутного ветра в ваших элементах 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.
Надеюсь, что это работает для вас :)
Думаю, что баг от попутного ветра и не реагирует. возможно, это просто опечатка
hover: bg-slate-100
не должно быть пробела между ними. так что правильная версияhover:bg-slate-100