Мне нужно создать форму, которая будет отображать что-то на основе возвращаемого значения API. Я работаю со следующим кодом:
class App extends React.Component {
constructor(props) {
super(props);
this.state = {value: ''};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({value: event.target.value});
}
handleSubmit(event) {
alert('A name was submitted: ' + this.state.value); //error here
event.preventDefault();
}
render() {
return (
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input type="text" value={this.state.value} onChange={this.handleChange} /> // error here
</label>
<input type="submit" value="Submit" />
</form>
);
}
}
Я получаю следующую ошибку:
error TS2339: Property 'value' does not exist on type 'Readonly<{}>'.
Я получил эту ошибку в двух строках, которые комментировал код. Этот код даже не мой, я получил его с официального сайта реакции ( https://reactjs.org/docs/forms.html ), но здесь он не работает.
Я использую инструмент создания-реакции-приложения.
reactjs
typescript
Луис Энрике Циммерманн
источник
источник
Ответы:
Component
Определяется следующим образом:Это означает , что тип по умолчанию для государства (и реквизита) является:
{}
.Если вы хотите, чтобы ваш компонент
value
находился в состоянии, вам нужно определить его следующим образом:Или:
источник
В дополнение к ответу @ nitzan-tomer у вас также есть возможность использовать внешние интерфейсы :
Либо хорошо, если вы последовательны.
источник
Проблема в том, что вы не объявили свое состояние интерфейса, замените его подходящим типом переменной 'value'
Вот хорошая ссылка
источник
event.target
имеет тип,EventTarget
который не всегда имеет значение. Если это элемент DOM, вам нужно привести его к правильному типу:Это также выведет «правильный» тип для переменной состояния, хотя явное, вероятно, лучше
источник