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

Я пытаюсь отправить форму из дочернего компонента с помощью кнопки, размещенной в родительском. Родитель — это слайд с кнопкой «Далее», и я показываю свой дочерний компонент на одной странице слайда.

Что я хочу сделать, так это: когда я нажимаю следующую кнопку от родителя, я должен перейти к следующему слайду, а также отправить дочернюю форму.

код: Родительский компонент:

import Slider from "react-slick";

class Parent extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
    
      errors: {}
    }
     next() {
        this.slider.slickNext();
      }
      previous() {
        this.slider.slickPrev();
      }
       
      render() {
        const settings = {
          dots: true,
          infinite: false
        };
    
        return (
    <div>
          <Slider ref = {c => (this.slider = c)} {...settings}>
                        <div style = {{ textAlign: "center" }} key = {1} >
                          
                          <Child /> //this is the Child I want to submit once I press Next Button
                          
                          <Button id = "btn" className = "btn btn-primary float-right " type = "submit" onClick = {this.next}> Next</Button> //this is the next button which sould trigger the submit from Child
                        </div>
                        <div key = {2} >
                          <Page2/> 
                          <Button className = "btn btn-primary float-right " id = "btn" onClick = {() =>  this.finish()>Finish</Button>
                          <Button id = "btn" className = "btn btn-primary float-right " onClick = {this.previous}> Previous</Button>
                        </div>           
          </Slider>
    </div>
      );
      }
}

Дочерний компонент:

class Child extends React.Component {

    constructor(props) {
        super(props)
        this.state = {
            info: '',
            infoID: 0,
            valid:false,
            errors: {}
        }
this.handleValidSubmit = this.handleValidSubmit.bind(this);
this.onChange = this.onChange.bind(this);
}

handleValidSubmit() {
    if (valid){
        localStorage.setItem("infoID",this.state.infoID);
        this.sendIDToServerAPI(infoID);
       }else {
        localStorage.setItem("infoID",this.state.infoID);
        this.saveNewInfoAPI(info);
      }
    }
 render() {

        return (
            <div }>

                <Container fluid >

                    <Row >
                        <Col  >

                            <AvForm id = "avForm" onValidSubmit = {this.handleValidSubmit} onInvalidSubmit=}>
                               <Label >Info</Label>
                               <AvField onChange = {this.onChange} name = "email" placeholder = ""Email/>
                              ........
                              .......
                            </AvForm>

                      </Col>

                    </Row>

                </Container>
            </div>
       );
    }

}

Я попытался минимизировать компоненты, потому что они слишком велики, надеюсь, достаточно ясно, что я пытаюсь сделать. Может ли кто-нибудь помочь мне с решением/идеей? Я попытался использовать Google, но не нашел ничего полезного.

Большое спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 529
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Что вы можете сделать, так это сохранить состояние (флаг), что-то вроде отправки, которое изначально будет ложным.

class Parent extends React.Component {

  constructor(props) {
    super(props)
    this.state = {
    submit: false
    ....rest of your code
    }
    

  // function to update the submit state
  const setFormSubmit = () => this.setState({submit: true})
}

Теперь вы вызываете setFormSubmit при следующем нажатии кнопки Теперь вы можете передать это состояние (отправить) своему дочернему компоненту. и всякий раз, когда отправка верна, вы запускаете метод для отправки формы

Вы можете сделать это, используя componentDidUpdate в дочернем компоненте.

  componentDidUpdate(prevProps, prevState) {
  // if prev submit and current submit prop is unequal and the submit is true
  if ((prevProps.submit !== this.props.submit) && this.props.submit) {
    // Call method to submit form
  }
}

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