#reactjs
#reactjs
Вопрос:
Мне пришлось добавить проверку в поле ввода, поэтому я использовал это:
<input
type="text"
name={this.state.editBookData.title}
value={this.state.toEditBookData.title}
onChange={e => {
let { editBookData } = this.state;
editBookData.title = e.target.value;
this.setState({ [editBookData.title]: e.target.value });
}}
/>
Здесь строка this.setState({[editBookData.title]: e.target.value});
останавливает любой ввод при вводе.
editBookData
устанавливается в состояние, подобное этому:
constructor(props) {
super(props);
this.state = {
toEditBookData: {
id: 0,
title: "",
rating: ""
}
};
}
Также, когда я проверяю в консоли, когда я ввожу что-либо во входных данных, свойство name принимает только 1 символ и перестает добавлять какие-либо другие символы.
пожалуйста, дайте мне знать, почему я не могу ввести какие-либо буквы. Спасибо
Комментарии:
1. Это происходит потому, что вы устанавливаете editBookData.title, но ваше поле значения считывается из toEditBookData.
2. Какой-либо из ответов сработал для вас? Рассмотрите возможность принятия одного из них , если это так.
Ответ №1:
Вы не хотите добавлять новое свойство в состояние с тем же именем, что и editBookData.title
, но вместо этого обновите toEditBookData
объект новым названием, поскольку именно оно используется как value
для ввода.
<input
type="text"
name={this.state.editBookData.title}
value={this.state.toEditBookData.title}
onChange={e => {
const { value } = e.target;
this.setState(prevState => {
return {
toEditBookData: { ...prevState.toEditBookData, title: value }
};
});
}}
/>
Ответ №2:
Я не уверен, что вам нужны два объекта здесь. Это должно сработать.
class App extends React.Component {
state = {
id: 0,
title: "",
rating: "",
errors: {}
};
handleChange = e => {
const { name, value } = e.target;
const { errors } = this.state;
errors[name] = !!!value;
this.setState({ [name]: value, errors });
};
render() {
const { title, errors } = this.state;
return (
<div className="App">
<label htmlFor="title">Title: </label>
<br />
<input
type="text"
name="title"
value={title}
onChange={this.handleChange}
/>
<br />
{errors.title amp;amp; (
<span style={{ color: "red" }}>Title is a required field</span>
)}
</div>
);
}
}