#javascript #reactjs #colors #onclick #styles
#javascript #reactjs #Цвет #onclick #стили
Вопрос:
Я пытаюсь сделать так, чтобы при нажатии на элементы, которые я динамически создаю ниже, они меняли цвет.
handleBuild() {
const from = parseInt(document.getElementById("from").value);
const to = parseInt(document.getElementById("to").value);
let newSquares = [];
for (let i = from; i <= to; i = i 0.5) {
if (i.toString().includes(".")) {
newSquares.push(i.toString().split(".", 1) ":30");
} else {
newSquares.push(i.toString());
}
}
this.setState({ squares: newSquares });
}
render() {
const items = this.state.squares.map((item) => (
<div
name={item}
onClick={() => this.handleColor}
className="squares"
key={item}
>
<h4>{item}</h4>
</div>
));
Мне интересно, как handleColor
должна выглядеть моя функция? У меня есть состояние, которое я могу использовать для изменения цвета, но сначала я хочу знать, как изменить цвет динамически создаваемого DIV в react? Какую информацию я должен передать функции, чтобы выбрать этот DIV и изменить его свойства стиля при нажатии?
Заранее спасибо
Ответ №1:
Вам нужно передать индекс элемента массива, чтобы идентифицировать элемент в массиве. В функции handleColor извлеките этот элемент из массива и обновите на основе индекса и обновите состояние.
handleColor = (index) => {
const squares = this.state.squares
const item = this.state.squares[index]
item.color = "#fff" // any random color
squares[index] = item
this.setState({
squares
})
const items = this.state.squares.map((item,index) => (
<div
name={item}
style={{ color: item.color}}
onClick={(index) => this.handleColor(index)}
className="squares"
key={item}
>
<h4>{item}</h4>
</div>
));
Комментарии:
1. Я пытался целую вечность и собираюсь сдаться. Можете ли вы сказать мне, что мне нужно исследовать, чтобы узнать о динамическом отображении DIV, а затем получить доступ к этим DIV позже? Спасибо
2. Практика сделает вас совершенным. Не сдавайтесь. Со временем вы овладеете мастерством. В случае, если вы где-то застряли, приложите усилия с вашей стороны, если не получите результата, просто разместите сообщение в stackoverflow, сообщество поможет вам определить проблему. вы можете посмотреть канал maxmillian или другого youtube-канала youtuber react.