【问题标题】:How do I submit a form's data to another function without refreshing the page?如何在不刷新页面的情况下将表单的数据提交给另一个函数?
【发布时间】:2019-07-25 21:17:52
【问题描述】:

我正在使用 REACT JS 开发一系列 Web 应用程序。对于我正在开发的当前应用程序的一部分,我有一个在状态更改时呈现的模式,并有一个表单来接收包含一些相关数据的名称。我希望此表单中的提交按钮将代码提交给 submitNewName() 函数,该函数会将提交的名称和数据与 JSON 文件中的名称和数据进行比较。不幸的是,我无法测试我的任何代码是否有效,因为页面在提交时会刷新,这会刷新开发者控制台。

在我的submitNewName() 函数中,我有以下代码行: var newName = document.getElementById("newNameForm").submit()。我读到另一个类似的问题,有人建议添加function(e) {e.preventDefault();} 作为.submit 的参数,但是当我尝试它并没有改变任何东西时。

这是我的表格:

<form id="addNameForm" className="RNGpopupTXT">
                                Name: <input type="text" name="name"/>
                                <br/><br/>
                                Type:  <select>
                                    <option value="fname">First Name</option>
                                    <option value="lname">Last Name</option>
                                    <option value="sname">Single Name (e.g. Madonna)</option>
                                    <option value="title">Title</option>
                                </select> 
                                <br/><br/>
                                Gender: <select>
                                    <option value="mg">Male</option>
                                    <option value="fg">Female</option>
                                    <option value="ng">Non-specific</option>
                                </select> 
                                <br/><br/>
                                Tags: <input type="text" size="40" name="tags" placeholder=" eg. 'Star Wars,Scifi,Space'"/>
                                <br/><br/><br/><br/>
                                <div align="center">
                                    <input type="submit" value="Submit" className="mdc-button" style={{ textDecoration: 'none' }} onClick={() => this.submitNewName()}/>
                                </div>
                            </form>

这是我的功能:

submitNewName() {
        var newName = document.getElementById("newNameForm").submit(function(e) {
            e.preventDefault();
        });
}

我希望将表单中的数据提供给函数,以便将其与 JSON 文件数据进行比较。我也不希望页面刷新,因为这会刷新页面状态,过早关闭模式。当我现在运行程序时,它确实向控制台发送了一条错误消息,但我无法阅读它所说的内容,因为控制台已刷新网页。

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    感觉你可以在这里使用更多的 React 来让你的生活更轻松。

    您不必使用表单的onSubmit 事件。您可以将onClick 处理程序添加到按钮。在那个函数中,你可以做所有你想做的比较,当你准备好时,它也可以做提交逻辑。

    如果您想比较表单的值,您可能希望保持这些值处于状态。不过,要做到这一点,您需要每个表单元素上的onChange 函数来在用户提供输入时更新状态。

    由于我在您的示例中没有看到太多 React 代码,所以我冒昧地写了一些。希望对您有所帮助:

    https://codesandbox.io/s/elastic-shape-yrv0b

    【讨论】:

    • 将表单组件的状态值传递给主应用程序的最佳方式是什么?我听说你不应该直接打电话给他们。
    • 主应用是指父组件吗?
    • 好吧,我不确定组件之间的关系是如何工作的,但在您的代码中,它将是 index.js 文件的 app 函数。在我的代码中,
      在另一个组件的渲染中。
    • 以我的代码为例,如果父&lt;App/&gt; 组件需要知道表单的状态,它就需要管理自己的状态。 &lt;App/&gt; 会将一个函数向下传递给 &lt;Form/&gt;,该函数将更新 &lt;App/&gt; 中的状态。此时,我们可能甚至不需要&lt;Form/&gt; 上的状态。见这里:codesandbox.io/s/relaxed-pike-bqcfr
    • 或者,您也可以使用Context,以便您的状态存在于更高级别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2022-10-02
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多