#javascript #css #reactjs
Вопрос:
<div className="images-container">
{cities?.map((city) => (
<>
{city?.isActive amp;amp; (
<>
{city?.images.map((image) => (
<div className="img-block">
<img className="cardd-img" src={image.image} alt="DGNet" />
<p className="paragrafo">{image?.paragraph}</p>
</div>
))}
</>
)}
</>
))}
</div>
У меня есть список городов ОС, и мне нужно изменить фон, когда выбран город ОС, вот что у меня есть
const [cities, setCities] = useState([
{
name: "Divinópolis",
isActive: false,
images: [
{
image: imgLogoTIVerde,
paragraph: "Special Sales e Technical Support",
}
],
},
{
name: "Nova Olímpia",
isActive: false,
images: [
{
image: imgLogoLivitech,
paragraph: "Special Sales e Technical Support",
}
],
},
const states = [
{
name: 'minas gerais',
cities: ['Divinópolis', '']
},
{
name: 'paraná',
cities: ['Nova Olímpia', '']
}
]
function handleChangeCity(name) {
const cityChanged = cities.map((city) => {
city.isActive = false;
if (city.name === name) city.isActive = true;
if (city.name === name) city.arrowActive = true;
return city;
});
setCities(cityChanged);
}
<div className="scroll">
{states?.map(state => (
<div key={state.name} className="cidade">
<header className="header">
<h1 className="font-bold">{state.name}</h1>
</header>
{state.cities.map(city => (
<>
<div className="city-block">
<label className="label" for="content">
{city}
</label>
<input type="radio" name="radio" className="single" onClick={() => handleChangeCity(city)} />
</div>
</>
))}
</div>
))}
</div>
В тот момент, когда я выбираю город, который img показывает на контейнере, это работает нормально, на самом деле нужно, чтобы фон этого города также изменился, но только выбранный.
Я добавил часть кода, где показано изображение, когда выбран город, каждый город может иметь другое изображение или такое же, как и другие
Комментарии:
1. Какой раздел вы хотите оформить? Так ли это
city-block
?2. @DanZuzevich да, это тот, на котором показаны названия городов
3. Работает ли мой ответ? Только что опубликовал один.
4. @DanZuzevich это не сработало
Ответ №1:
Не было на 100% ясно, в какой div вы хотите добавить цвет фона, но эта логика должна работать для вас.
{state.cities.map(city => (
<>
<div className="city-block" style={{ backgroundColor: city.isActive ? 'blue' : 'none' }}>
<label className="label" for="content">
{city}
</label>
<input type="radio" name="radio" className="single" onClick={() => handleChangeCity(city)} />
</div>
</>
))}
Комментарии:
1. Очевидно, стилизуйте его в любой цвет, какой вы хотите, это просто пример.
2. Это не сработало, фон не изменился
3. Кажется , что вы составляете карту насквозь
state.cities
, в то время как вы должны простоcities
составлять карту . В своемhandleChangeCity
вы обновляетеcities
состояние. Я не уверен, чтоstate
это такое.4. Я отредактировал вопрос с помощью div, который показывает изображение при нажатии на город. Вот как это работает: постановка—setorazul.netlify.app/agente
Ответ №2:
Вы можете передать другое имя класса, если оно активно или нет, или использовать реквизиты стиля. Пример:
<div className={city.isActive ? 'class-with-backgroud-1' : 'class-with-backgroud-2'}>
...
</div>
или:
<div style={{ backgroundColor: city.isActive ? 'color-1' : 'color-2' }}>
...
</div>
Комментарии:
1. здесь это не сработало