Я бы не рекомендовал обновлять DOM вручную и не рекомендовал бы вызывать this.forceUpdate () - это не очень хорошая практика для React.
Использование setState () - это правильный способ получитьправильный результат вы собираетесь.Для небольшого, простого приложения, я думаю, вы могли бы сделать что-то вроде этого:
import React, { Component } from 'react'
import styled from 'styled-components'
export default class ChangingDiv extends Component {
state = {
bgColor: 'red'
}
handleColorChange = () => {
const { bgColor } = this.state
bgColor === 'red'
?
this.setState({ bgColor: 'blue' })
:
this.setState({ bgColor: 'red' })
}
render() {
const { bgColor } = this.state
return (
<ColorDiv color={bgColor}>
<TextBox
onFocus={this.handleColorChange}
onBlur={this.handleColorChange}
/>
</ColorDiv>
)
}
}
const ColorDiv = styled.div`
width: 100%;
height: 300px;
display: flex;
justify-content: center;
align-items: center;
background-color: ${props => props.color};
`
const TextBox = styled.textarea`
width: 300px;
padding: 20px;
font-size: 16pt;
`
Используя стилизованные компоненты, вы можете установить цвет на основе состояния.Здесь я устанавливаю цвет фона ColorDiv, чтобы он соответствовал состоянию bgColor.Когда он меняется, меняется и цвет фона.Вы могли бы даже добавить длительность перехода в ColorDiv для более плавного перехода.
Если вы не используете стилизованные компоненты, вы могли бы по сути сделать то же самое, за исключением того, что вместо пропеллера состояния bgColor вы сделали бы егоимя класса.Имя класса изменится, когда вы сфокусируете и запачкаете поле ввода:
import React, { Component } from 'react'
export default class ChangingDiv extends Component {
state = {
className: 'red'
}
handleColorChange = () => {
const { className } = this.state
className === 'red'
?
this.setState({ className: 'blue' })
:
this.setState({ className: 'red' })
}
render() {
const { className } = this.state
return (
<div className={className}>
<textarea
onFocus={this.handleColorChange}
onBlur={this.handleColorChange}
/>
</div>
)
}
}
Если вы все еще не хотите устанавливать величественный цвет, тогда вы всегда можете сделать традиционный document.getElementById ('# colorDiv')и изменить цвет таким образом.Но это нарушит правила React, потому что вы будете манипулировать DOM напрямую.