хорошо, поэтому я внес в ваш код некоторые изменения, которые вы можете просмотреть здесь: https://stackblitz.com/edit/dhanapal-react-ex-1-8pzeks?file=index.js
В случае, если вышеуказанная ссылка больше не работает, я изменил следующее: Filter.Js:
export default class Filter extends Component {
constructor(props){
super(props);
this.state = {
myName: ''
}
}
submitForm = (e) => {
e.preventDefault();
this.props.handleData(this.state)
}
onChange = (e) => {
this.setState({
myName: e.target.value
});
}
render() {
return (
<div>
<form>
Name: <input type="text" name="myName" onChange={this.onChange}/>
<br /><br />
<input type="button" value="Submit" onClick={this.submitForm}/>
</form>
</div>
)
}
}
и в ResultList.js:
export default class ResultList extends Component {
constructor(props){
super(props);
this.state = {
myName: ''
};
}
handleParentData = (formModel) => {
this.setState({...formModel});
}
render() {
return (
<div>
<Filter handleData={this.handleParentData}/>
<p>{this.state.myName}</p>
</div>
)
}
}
Важно отметить, что любой объект, который вы создаете в JS (т.е. ваше состояние в каждом компоненте), уже находится в формате JSON, поэтому нет необходимостипопытаться преобразовать это.Вот в чем проблема:
В Filter.js
вы передавали одно свойство из состояния (this.state.myName
), а в ResultList.js
, функции handleParentData()
, вы ожидали получить событие очень многокак будто вы из функций on change, но на самом деле вы просто передавали строку.Вот почему ничего не произойдет.В Filter.js
, когда вы хотите отправить обратно форму в родительский компонент, я бы предложил передать обратно весь объект состояния (который уже является объектом JSON) вместо отдельного свойства.Обратитесь к моему рабочему примеру, и вы сможете понять, что я имею в виду.
PS Я думаю, что я случайно отредактировал ваш оригинальный пример кода, если я это сделаю, мне очень жаль, что я не хотел.