У меня есть элемент ввода, который отображается в зависимости от условия.
render() {
const {
isNameInputVisible,
name
} = this.state;
return (
<div>
{isNameInputVisible ? (
<input
onChange={this.handleNameChange}
ref={this.nameInput}
type="text"
value={name}
/>
) : (
<h1
className="list-header__heading"
onClick={this.handleNameInputVisibility}
>
{name}
</h1>
)}
</div>
)
По сути, я хочу прослушать щелчок документа, чтобы скрыть ввод, когда пользователь щелкает вне этого элемента ввода.
Прямо сейчас я делаю это:
componentDidMount() {
document.addEventListener('mousedown', this.handleClick);
}
handleClick = event => {
//do some logic
};
Но мне было интересно, если это правильный путь, потому что событие существует и срабатывает,
даже если элемент не отображается.
Итак, я попробовал это:
componentDidUpdate () {
const {isNameInputVisible} = this.state;
isNameInputVisible && document.addEventListener('mousedown', this.handleClick);
}
Но это не работает.
Вопрос 1:
Как правильно прикреплять события к документу, когда это зависит от других условно отображаемых элементов ??
Вопрос 2:
Как правильно прикрепить события, например, как escape-нажатие, для закрытия диалоговых окон и т. Д. ??