【问题标题】:React onSubmit placement对提交位置做出反应
【发布时间】:2019-10-30 03:06:44
【问题描述】:

我查看了在 React 中使用 onSubmit 函数的多个来源,它们总是将 onSubmit 触发器作为 Form 属性放置,就像这样

import React, { Component } from "react";

import { connect } from "react-redux";
import PropTypes from "prop-types";
import { register } from "../../../actions/auth/auth.action";

import { Container } from "react-bootstrap";
import {
    Button,
    Form,
    Label,
    Input,
  } from "reactstrap";

class Register extends Component {
    state = {
        fname: "",
        lname: "",
        email: "",
        password: ""
    };

    static propTypes = {
        register: PropTypes.func.isRequired
    };

    handleChange = e => {
        this.setState({
            [e.target.name]: e.target.value
        });
    };

    handleSubmit = e => {
        e.preventDefault();

        const { fname, lname, email, password } = this.state;

        const newUser = {
            name: {
                first: fname,
                last: lname
            },
            email: {
                address: email
            },
            password
        };

        // Attempt to register user
        this.props.register(newUser);
    };

    render() {
        return(
                        <Form onSubmit={this.handleSubmit}>
                                <Label for="fname">First Name</Label>
                                <Input
                                    type="text"
                                    name="fname"
                                    id="fname"
                                    placeholder="Enter first name"
                                    className="mb-3"
                                    onChange={this.handleChange}
                                />

                                <Label for="lname">Last Name</Label>
                                <Input
                                    type="text"
                                    name="lname"
                                    id="lname"
                                    placeholder="Enter last name"
                                    className="mb-3"
                                    onChange={this.handleChange}
                                />

                                <Label for="email">Email</Label>
                                <Input
                                    type="email"
                                    name="email"
                                    id="email"
                                    placeholder="Enter email"
                                    className="mb-3"
                                    onChange={this.handleChange}
                                />

                                <Label for="password">Password</Label>
                                <Input
                                    type="password"
                                    name="password"
                                    id="password"
                                    placeholder="Enter password"
                                    className= "mb-3"
                                    onChange={this.handleChange}
                                />
                                <Button color="primary" style={{ marginTop: "2rem" }} block>
                                    Register
                                </Button>
                        </Form>
        );
    };
};

const mapStateToProps = state => ({
    error: state.error   
});

export default connect(
    mapStateToProps,
    { register }
)
(Register);

但是,当我尝试这样做时,无法调用该函数。 (即,当调用是表单属性时,按钮如何“知道”何时调用 onSubmit 函数)我什至尝试向按钮添加 type="submit" 属性,但这也不起作用。

【问题讨论】:

  • 这看起来像一个自定义的Button 组件。你用的是什么库?
  • 抱歉含糊不清 - 我添加了导入的库
  • 嗯,看起来 reactstrap Form 组件没有 onSubmit 属性。您是否尝试过将onClick 用于Register 按钮?
  • 是的,这似乎也不起作用。
  • 完整代码有助于找出问题

标签: reactjs forms onsubmit


【解决方案1】:

只需在您的按钮&lt;button type="submit"&gt;send stuff&lt;/button&gt; 中声明 type="submit" 类型属性就是 onSubmit 表单正在等待的 :) 并从您的 handleSubmit 方法中删除 e.preventDefault 并重试

【讨论】:

  • 虽然直观,但向按钮添加提交类型似乎不起作用。
  • @R.Antao,onSubmit 应该在 Form 标签内...&lt;form onSubmit={this.handleSubmit}&gt;
  • ...以及类型为 submit 的按钮 :)
  • 这就是我最初所拥有的......我认为这会是解决方案,但它没有用
  • 当我在 Form 标签中有 onSubmit 时,什么也没有发生(即使设置了 Button type="submit"),当我在 Button 标签中有 onSubmit 时,表单清除为如果数据提交但我没有在控制台中获得日志。
【解决方案2】:

提交事件发生时会调用该函数。

以下代码显示了触发提交事件的操作。

class FormComponent extends React.Component {

  handleSubmit = e => {
    e.preventDefault();
    console.log('submitted');
  }

  render() {
    return (
      <form onSubmit={this.handleSubmit}>
        <input type="submit" /><br />
        <button>Button with no attribute</button><br />
        <button type="submit">submit typed Button</button><br />
        <button type="button">button typed Button (no submit)</button><br />
        <input type="text" value="Press enter to submit" />
      </form>
    );
  }
}

ReactDOM.render(
  <FormComponent />,
  document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>

【讨论】:

  • 我看到您的代码正常工作,正如我所期望的那样。也许是因为我使用了 reactstrap 库 Form 组件,所以 props 没有被正确传递?
猜你喜欢
  • 2016-04-14
  • 2013-02-16
  • 1970-01-01
  • 2021-02-18
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 2022-12-24
  • 2013-07-26
相关资源
最近更新 更多