您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何从React中该组件外部的按钮提交表单?

如何从React中该组件外部的按钮提交表单?

在React中,数据流向下,动作流向上。因此,通知子组件有关父组件中按钮单击的信息。 这就是您可以执行的操作。

import React, { Component } from "react";
import ReactDOM from "react-dom";

class CustomForm extends Component {
  handleOnSubmit = e => {
    e.preventDefault();
    // pass form data
    // get it from state
    const formData = {};
    this.finallySubmit(formData);
  };

  finallySubmit = formData => {
    alert("Form submitted!");
  };

  componentDidUpdate(prevProps, prevState) {
    if (this.props.submitFromOutside) {
      // pass form data
      // get it from state
      const formData = {};
      this.finallySubmit();
    }
  }

  render() {
    return (
      <form onSubmit={this.handleOnSubmit}>
        <button type="submit">Inside Custom</button>
      </form>
    );
  }
}

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      submitFromOutside: false
    };
  }
  submitCustomForm = () => {
    this.setState({
      submitFromOutside: true
    });
  };

  componentDidMount() {
    console.log(this.form);
  }

  render() {
    return (
      <div>
        <CustomForm submitFromOutside={this.state.submitFromOutside} />
        <button onClick={this.submitCustomForm}>In Root</button>
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

对我而言,此解决方案是很棘手的,不是以一种反应的方式,而是可以满足您的用例。 在此处找到有效的解决方案:https ://codesandbox.io/s/r52xll420m

您可以通过使用常规HTML功能(HTML表单Attribute)来实现此目的,而无需使用React hacks:

在您的表单中添加“ id”属性:id =’my-form’

class CustomForm extends Component {
    render() {
        return (
             <form id='my-form' onSubmit={alert('Form submitted!')}>
                // Form Inputs go here    
             </form>
        );
    }
}

然后在表单之外的目标按钮的“表单”属性添加相同的ID:

<button form='my-form' type="submit">Outside Button</button>

现在,“外部按钮”按钮将完全等同于表单内部。

注意:IE11不支持功能

其他 2022/1/1 18:15:07 有657人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶