#javascript #reactjs #input
#javascript #reactjs #ввод
Вопрос:
Я новичок и недавно узнал о контролируемом вводе в React. По-видимому, нужно привязать функцию к обработчику событий, который принадлежит компоненту. Почему?
class ControlledInput extends React.Component {
constructor(props) {
super(props);
this.state = {
input: ''
};
// binding in the constructor
this.handleChange = this.handleChange.bind(this)
}
// what the function does
handleChange(event){
this.setState({
input: event.target.value
})
}
render() {
return (
<div>
<input value = {this.state.input}
{//binding within the component}
<input onChange = {this.handleChange.bind(this)}>
</input>
{//why}
<h4>Controlled Input:</h4>
<p>{this.state.input}</p>
</div>
);
}
};
Извините, что беспокою вас
Комментарии:
1.
.bind(this)
В JSX нет необходимости. Он уже был привязан кthis
конструктору, нет необходимости делать это снова. Причина, по которой это вообще делается, заключается в том, что в противномthis
случае не будет ссылаться на экземпляр класса. Другое распространенное решение — сделать его функцией со стрелкой. Есть несколько других хороших ответов, которые подробно объясняют.2. Где вы этому учитесь? Похоже на устаревший учебник
3. ^ Тоже хороший момент. С помощью ES6 привязка в React теперь редко требуется. Плюс с помощью хуков функциональные компоненты в основном заменили основанные на классах.
4. Привязка (this) в javascript происходит потому, что вы передаете текущий экземпляр вашего компонента, который вы используете, в методе. Если вы не добавите привязку, это будет ссылка на html-элемент ( здесь ввод ). Так что из-за этого вы не можете получить доступ к своему состоянию. Привязка обязательна в компоненте класса