Я хочу отправить данные формы, которые находятся в моем дочернем элементе, в родительский компонент. На функцию отправки, которую я написал в родительском компоненте. Родительский компонент:
handleChangeEventValue = (e) => {
this.setState({
[e.target.name]: e.target.value,
[e.target.value]: e.target.value
});
}
handleSubmit() {
var newObj = {
'id' : this.state.id,
'name' : this.state.name,
};
render() {
return (
<div className = "App">
<UsingForm onChangeValue =
{this.handleChangeEventValue} handleSubmit = {this.handleSubmit}>
</UsingForm>
</div>
);
}
И дочерний компонент:
<form onSubmit = {this.handleSubmit}>
<label>
Name:
<input type = "text" name = "uname" value = {this.props.uname}
onChange = {(e)=>this.props.onChangeValue(e)}></input>
</label>
<label>
ID:
<input type = "text" name = "id" value = {this.props.id} onChange=
{(e)=>this.props.onChangeValue(e)}></input>
</label>
<input type = "button" value = "Submit" onClick=
{this.props.handleSubmit} />
</form>
Не получают значения состояния в handleSubmit(), почему?





вам нужно связать функцию handleSubmit, используя функцию стрелки
handleSubmit = () => {
var newObj = {
'id' : this.state.id,
'name' : this.state.name,
};
или в конструкторе
constructor(props) {
...
this.handleSubmit.bind(this)
}
Спасибо, я сделал это. Теперь это дает мне эту ошибку: «TypeError: не удается прочитать состояние« свойства »неопределенного handleSubmit» в моем handleSubmit(). handleSubmit() { var newObj = { 'id': this.state.id, 'name': this.state.name, }; console.info(новыйОбъект);
В вашем дочернем компоненте нет метода handleSubmit. Удалите onSubmit = {this.handleSubmit} из тега <form> в дочернем компоненте.
Вы должны изменить
<label>
Name:
<input type = "text" name = "name" value = {this.props.name}
onChange = {(e)=>this.props.onChangeValue(e)}></input>
</label>
а также
<UsingForm onChangeValue =
{this.handleChangeEventValue} handleSubmit = {this.handleSubmit} name = {this.state.name} id = {this.state.id}>
</UsingForm>
Привяжите функцию handleSubmit или используйте выражение стрелки, передайте реквизиты uname и id, а также инициализируйте их перед этим.