Кажется, ты слишком усложняешь вещи. Я не вижу необходимости в рефери здесь. Я не думаю, что установка свойства класса вызовет повторную визуализацию, поэтому этот способ управления вводом может вообще не работать, несмотря на то, что он не является наилучшей практикой.
Просто используйте состояние в качестве значения и обновляйте состояние при изменении. Чтобы сохранить гибкость, используйте имя входа в качестве ключа состояния. Примерно так:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
title: "default title"
};
}
handleSubmit = e => {
e.preventDefault();
console.log("submitted");
// Not sure if thats what you're looking for..
// Also: no need to do {...this.state, }. setState does a merge, not overwrite
this.setState({ title: this.state.input1 });
};
handleChange = e => {
// Use e.target.name as the computed property name,
// so it can be used for infinite number of inputs
this.setState({[e.target.name]: e.target.value});
};
render() {
return (
<>
<div>{this.state.title}</div>
<form onSubmit={this.handleSubmit}>
<input
type="text"
name="input1" // Give it a unique name for setting state
value={this.state.input1} // Specify the value instead of using a ref
onChange={this.handleChange}
></input>
<button type="submit">Save</button>
<button type="reset">Reset</button>
</form>
</>
);
}
}
Вот ссылка на документацию о реагировании на refs . Основные рекомендуемые сценарии использования:
- Управление фокусировкой, выделением текста или воспроизведением мультимедиа.
- Запуск обязательных анимаций.
- Интеграция со сторонним DOM библиотеки. Что я не верю, применимо, здесь. Поэтому я бы не рекомендовал использовать их здесь.