Вы должны передать значение в указанную c опору, которую будет искать дочерний компонент, NameProcess
. Например, return <NameProcess value={theName} />;
, а затем получить доступ к нему в дочернем компоненте через this.props.value
. Однако const {theName} = this.state.value
вернет undefined
, если value
не является объектом, обладающим свойством theName
. Вы, вероятно, хотите вместо этого сделать const { value } = this.state
.
Но я также не уверен, почему вы возвращаете этот компонент из функции handleSubmit
. Вместо этого вы можете подождать отправки, пока не появится компонент, и добавить его в свое состояние, чтобы пометить при отправке формы:
this.state = {
value: '',
submitted: false
};
и вашей функции handleSubmit
для обновления значения до true
:
handleSubmit(event) {
event.preventDefault(); // to prevent default action taken on form submit
alert('A name was submitted: ' + this.state.value);
this.setState({ submitted: true });
}
и вашей функции рендеринга для отображения дочернего компонента после отправки:
{this.state.submitted && return <NameProcess value={this.state.theName} />}
Как упомянул @Yossi, вы можете очистить вашу render
функцию с помощью JSX, сделать весь файл, собрать все эти предложения вместе, что-то вроде этого:
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {
value: '',
submitted: false
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
const regexpr = /^[0-9\b]+$/;
if(event.target.value === '' || regexpr.test(event.target.value)){
this.setState({
value: event.target.value
});
}
}
handleSubmit(event) {
event.preventDefault();
const { value } = this.state;
alert('A name was submitted: ' + value);
this.setState({ submitted: true });
}
render() {
const { value, submitted } = this.state;
return (
{submitted ? <NameProcess value={value} /> : (
<form onSubmit={this.handleSubmit}>
<label>Name:</label>
<input type="text" value={value} onChange={this.handleChange} />
<input type="submit" value="Submit" />
</form>
)}
);
}
}