首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-final-form字段的动态名称

react-final-form字段的动态名称
EN

Stack Overflow用户
提问于 2019-06-01 06:40:39
回答 2查看 2.2K关注 0票数 2

我有两张表格。当我在第一个表单上选择一个选项时,第二个表单被添加到页面,其中包含从后端检索到的参数。现在如何将参数名设置为react-final-form字段名?

我找不到这样做的方法。在哪里传递参数名?

代码语言:javascript
复制
  <Form
    onSubmit={onSubmit}
    validate={validate}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-12 05:59:05

像这样调用FinalForm

代码语言:javascript
复制
<FinalFieldArrayForm onSubmit={this.handleSubmitTemplate} fieldsFromServer={parameters} />

而FinalForm是

代码语言:javascript
复制
import React from "react";
import ReactDOM from "react-dom";
import { Form, Field } from 'react-final-form'
import arrayMutators from 'final-form-arrays'
import { FieldArray } from 'react-final-form-arrays'

import "./styles.css";

const FinalForm = ({onSubmit, fieldsFromServer}) => (
  <Form
    onSubmit={onSubmit}
    mutators={{
      // potentially other mutators could be merged here
      ...arrayMutators
    }}
    render={({
      handleSubmit,
      form: {
        mutators: { push, pop }
      },
      pristine,
      form,
      submitting,
      values
    }) => (
      <form onSubmit={handleSubmit}>
        <div className="buttons">
          <button type="button" onClick={() => push('records', undefined)}>+</button>
          <button type="button" onClick={() => pop('records')}>-</button>
          <button type="button" onClick={form.reset} disabled={submitting || pristine}>Reset</button>
        </div>
        <FieldArray name="records">
        { ({fields}) => (
          <div>
          {fields.map( (name, index) => (
            <div key={`${name}.${index}`}>
              <label>{index + 1}</label>
              {fieldsFromServer.map( param => <Field key={`${name}.${param}`} name={`${name}.${param}`} component="input" placeholder={`${name}.${param}`} /> )}
              <button type="button" onClick={() => fields.remove(index)}>-</button>
              <button type="button" onClick={() => fields.insert(index+1)}>+</button>
            </div>
          ))}
          </div>
        )}
        </FieldArray>
        <div className="buttons">
          <button type="submit" disabled={submitting || pristine}>Submit</button>
        </div>
        <pre>{JSON.stringify(values, 0, 2)}</pre>
      </form>
    )}
  />
)

const rootElement = document.getElementById("root");
ReactDOM.render(<FinalForm onSubmit={() => (<div/>)} fieldsFromServer={["firstName", "lastName"]} />, rootElement);
票数 1
EN

Stack Overflow用户

发布于 2019-06-01 16:51:21

React Final form使用表单中所有字段的值调用onSubmit函数。将值传输到您的服务器完全取决于您。

如果您询问如何构建第二个表单,只需添加需要添加的字段。因此,假设您从服务器返回需要三个字段:[ 'name', 'startTime', 'endTime' ]。您只需遍历该数组并添加字段。

代码语言:javascript
复制
<Form onSubmit={onSubmit}>({handleSubmit}) => (
  <form onSubmit={handleSubmit}>
    {fieldsFromServer.map(fieldName => (
      <div key={fieldName}>
        <label>{fieldName}</label>
        <Field name={fieldName} component="input"/>
      </div>
    ))}
  </form>
)}<Form>

这有帮助吗?您不必“将参数传递给表单”,只需添加所需的Field组件即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56402423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档