у вас есть ошибки и некоторые полезные вещи, которые вы можете улучшить, давайте проверим их:
1) здесь вы устанавливаете this.props
на props
, это не очень хороший подход, потому что это сбивает с толку, на самом деле вам придется обращаться с this.props.props
, что не является желаемым соглашением об именах.
<TestForm submit={this.submit} props={ this.props } />
измените это на, используйте оператор распространения.
<TestForm submit={this.submit} {...this.props } />
2) здесь, когда вы выполните this.setState(this.props);
, как я сказал на # 1, вы будете устанавливать объект, и ваши подпорки будут внутри подпорок. поэтому, когда вы делаете this.state.email
, это должно быть this.state.props.email
.
componentDidMount(){
this.setState(this.props);
this.onInit(this.props);
console.log(" this props email = " + JSON.stringify(this.props));
console.log(" this state email = " + JSON.stringify(this.state.email ));
}
в основном ваш реквизитный объект будет выглядеть так:
{
"handleSubmit": function,
"props": {
"name" : '',
"email" : '',
"isActive" : true
}
}
такое отображение, что непосредственно к состоянию сделает this.state.email
не существующим.
Итак, чтобы исправить это, вам нужно правильно использовать свой реквизит, как я уже сказал, использование props={something}
на компоненте введет в заблуждение ваше использование внутри компонента, и именно это происходит с вами прямо сейчас.