У меня есть компонент реакции с неконтролируемым элементом ввода, как показано ниже:
class TestComponent {
onAddTypeClicked = el => {
console.info(el);
console.info(el.value);
};
render() {
return (
<div>
<input
name = "asset_types"
ref = {el => this.assetTypesAdd = el}
/>
<button
type = "button"
onClick = {e => this.onAddTypeClicked(this.assetTypesAdd)}
/>
</div>
);
}
Теперь, когда я ввожу какое-то значение в поле ввода и нажимаю кнопку, ввод печатается правильно, но значение пусто. Он отлично работает, если я использую подход document.getElementById. Кто-нибудь может указать, делаю ли я что-то не так, пожалуйста?
current действителен, если мы создаем ref с помощью React.createRef (), но в моем случае я использую шаблон обратного вызова.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я считаю, что ваш код работает правильно, и значение доступно в this.assetTypesAdd.value и его печатное значение одинаковы. Я не уверен, откуда вы получаете пустое значение для ввода.
// Example class component
class MyComponent extends React.Component {
onAddTypeClicked = el => {
console.info(el.value);
this.forceUpdate();
};
render() {
return (
<div>
<input
name = "asset_types"
ref = {el => this.assetTypesAdd = el}
/>
<button
type = "button"
onClick = {e => this.onAddTypeClicked(this.assetTypesAdd)}
>
Click me
</button>
{this.assetTypesAdd &&
<div>Value of input: {this.assetTypesAdd.value}</div>}
</div>
);
}
}
// Render it
ReactDOM.render(
<MyComponent/>,
document.getElementById("react")
);button {
width: 100px;
height: 20px;
display: block;
margin: 10px 0;
}<div id = "react"></div>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>Спасибо за Ваш ответ. Я только что понял, что в моем коде была ошибка.
Вы бы пробовали пройти
.current? такthis.onAddTypeClicked(this.assetTypesAdd.current);