Как передать данные формы из дочернего компонента в родительский компонент

Я хочу отправить данные формы, которые находятся в моем дочернем элементе, в родительский компонент. На функцию отправки, которую я написал в родительском компоненте. Родительский компонент:

    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 или используйте выражение стрелки, передайте реквизиты uname и id, а также инициализируйте их перед этим.

rkouye 12.04.2019 11:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
1 074
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вам нужно связать функцию 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(новыйОбъект);

user3226524 12.04.2019 11:35

В вашем дочернем компоненте нет метода handleSubmit. Удалите onSubmit = {this.handleSubmit} из тега <form> в дочернем компоненте.

Shantiswarup Tunga 12.04.2019 14:05

Вы должны изменить

<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>

Другие вопросы по теме