- PVSM.RU - https://www.pvsm.ru -
Продолжение серии переводов раздела "Продвинутые руководства" (Advanced Guides) официальной документации библиотеки React.js.
В большинстве случаев, мы рекомендуем использовать контролируемые компоненты [1] для реализации форм. В контролируемом компоненте, данные формы обрабатываются компонентом React. Есть альтернативный вариант — это неконтролируемые компоненты, в которых данные формы обрабатываются самим DOM.
При написании некотролируемого компонента, вместо того, чтобы писать обработчик событий для каждого обновления состояния, вы можете использовать ref [2] для получения значений формы из DOM.
Например, следующий код принимает значение Имени из формы в неконтролируемом компоненте:
class NameForm extends React.Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(event) {
alert('A name was submitted: ' + this.input.value);
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" ref={(input) => this.input = input} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
Поскольку в неконтролируемом компоненте хранение актуальных данных происходит в DOM — использование таких компонентов иногда позволяет проще интегрировать (соединять) React и не-React код. Если вас интересует меньший объем кода (и следственно скорость его написания) в ущерб чистоты кода — это вариант. В противном случае, лучше использовать контролируемые компоненты.
В жизненном цикле отображения (рендеринга) React, атрибут value
в элементах формы будет переопределять значение в DOM. В неконтролируемых компонентах, у вас часто будет возникать необходимость в задании начальных значений, при этом оставляя последующие обновления неконтролируемыми. В этом случае, вы можете задать атрибут defaultValue
вместо value
.
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input
defaultValue="Bob"
type="text"
ref={(input) => this.input = input} />
</label>
<input type="submit" value="Submit" />
</form>
);
}
Кроме того, <input type="checkbox">
и <input type="radio">
поддерживают атрибут defaultChecked
, а <select>
поддерживает defaultValue
.
Предыдущие части:
Первоисточник: React — Advanced Guides — Uncontrolled Components [5]
Автор: vtikunov
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/233322
Ссылки в тексте:
[1] контролируемые компоненты: https://facebook.github.io/react/docs/forms.html
[2] использовать ref: https://habrahabr.ru/post/319510/
[3] PropTypes — проверка типов в React.: https://habrahabr.ru/post/319358/
[4] JSX — подробности.: https://habrahabr.ru/post/319270/
[5] React — Advanced Guides — Uncontrolled Components: https://facebook.github.io/react/docs/uncontrolled-components.html
[6] Источник: https://habrahabr.ru/post/319520/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.