【问题标题】:how to reset the form and enable submit button after form submision (react-formio)?表单提交后如何重置表单并启用提交按钮(react-formio)?
【发布时间】:2019-11-03 12:46:55
【问题描述】:

我正在使用react-formio 包动态生成表单。

我使用此链接生成了一个简单的登录表单:https://codesandbox.io/s/cra-react-formio-iy8lz

构建后,它会创建一个 JSON。然后,我使用该 JSON 生成一个表单,但是当我在fulfill all validation of form 之后通过表单提交时,它总是显示在disable mode 为什么?

我们怎样才能再次启用按钮?当我的promise is resolved 提交后如何重置表单?

这是我的代码,codesandbox link

onSubmit={i => {
  alert(JSON.stringify(i.data));
  var promise1 = new Promise(function(resolve, reject) {
     setTimeout(function() {
        resolve("foo");
      }, 300);
   });
 }

还有一件事

我还加了one more button

{
   label: "Click",
   action: "event",
   showValidations: false,
   block: true,
   key: "click",
   type: "button",
   input: true,
   event: "clickEvent"
},

我还添加了点击处理程序,但它不起作用

clickEvent={() => {
  alert("--ss");
}}

【问题讨论】:

  • 虽然有一个小故障,您可以在第二次提交时看到错误消息(在提交按钮下方),但表单实际上已提交。
  • 也不是这样,这些自定义没有很好的记录。所以我建议,如果这个库不适合你的要求,你应该考虑不要在它之上构建。请在 formio 的 GitHub 存储库上创建一个工单,看看团队的反应。
  • 我认为使用css ..to overide css 可以消除故障
  • 可以的。但是将来您可能会遇到难以调试的问题。他们还有一个反应入门套件,显示可以完成的定制。你可以下载它并在本地机器上玩

标签: javascript reactjs formio


【解决方案1】:

您可以尝试使用<Form /> 组件的submission 属性。

根据文档..

提交数据以填写表格。您可以加载以前的 提交或使用一些预先填写的数据创建提交。如果你这样做 不提供提交表单将初始化一个空提交 使用表单中的默认值。

所以在这种情况下,您可以在父组件中控制该组件。

这里submissionData 是父组件状态,组件使用父组件的状态进行初始化(初始值为空)。

<Form submission={{ data: submissionData }} />

现在,在 onSubmit 处理程序中,您可以尝试重置状态并强制重新渲染。

    onSubmit={() => {
         // Reset submission data
          setSubmissionData({});
        };
      }

完整的代码如下所示。

export default () => {
  const [submissionData, setSubmissionData] = useState({});
  return (
    <Form
      //all form props
      submission={{ data: submissionData }}
      onSubmit={() => {
        var promise1 = new Promise(function(resolve, reject) {
          setTimeout(function() {
            resolve("foo");
          }, 300);
        });

        promise1.then(function(value) {
          alert(value);
         // Reset submission data
          setSubmissionData({});
        });
      }}
    />
  }

附加代码和框链接作为评论。

【讨论】:

  • 我认为使用 css 我们可以消除故障
  • 你可以做到。但是请确保您不要过多地进行电路板定制。如果您这样做,您将不会得到太多帮助,因为没有人会在进行如此多的定制方面有经验。而且您可能得不到足够的帮助
  • @NithinThampi 因为知道任何更好的构建动态表单的库
  • @NithinThampi 你能告诉我在这个例子中哪个数据变量包含 json 数据吗? submitData 是否将负责收集 json 数据或任何其他变量?因为我想将此 Json 数据保存到我自己的数据库中。
猜你喜欢
  • 2017-11-03
  • 2012-04-26
  • 2014-10-30
  • 2021-09-12
  • 2011-10-23
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 2019-12-11
相关资源
最近更新 更多