Ant-design: Sie können das Feld nicht festlegen, bevor Sie es registriert haben, wenn Sie den Wert auf ein dynamisches Formularelement setzen

Erstellt am 9. Jan. 2018  Â·  48Kommentare  Â·  Quelle: ant-design/ant-design

AusfĂŒhrung

3.1.1

Umfeld

MAC Chrom 63.0.3239.84 (64)、und 3.1.1

Reproduktionslink

https://ant.design/components/form-cn/#components -form-demo-dynamic-form-item

Schritte zum Reproduzieren

Wert des dynamischen Formularelements,
` const formItems = keys.map((k, index) => {
RĂŒckkehr (
{...formItemLayoutWithOutLabel}
erforderlich={wahr}
SchlĂŒssel={k}
>
{getFieldDecorator( minAmount-${k} , {
Regeln: [{
erforderlich: wahr,-
Meldung: "èŻ·èŸ“ć…„ć€§äșŽ0çš„ć€Œ",
}],
})(

)}

      { (keys.length > 1) ? (
        <Button
        type="danger"
        disabled={keys.length === 1}
        onClick={() => this.remove(k)}
        >ćˆ é™€</Button>
      ) : null}
    </FormItem>
  );
});

Example this.props.form.setFields( { "minAmount-1" : {value : 111} } ); .

Was wird erwartet?

Wert als allgemeine Felder festlegen.

Was passiert eigentlich?

Sie können das Feld nicht festlegen, bevor Sie es registriert haben.


Wenn Sie die Zeilendaten bearbeiten und die Daten auf ein dynamisches Formularelement setzen.

Usage

Hilfreichster Kommentar

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

Alle 48 Kommentare

Hallo @kerrzhao. Bitte stellen Sie eine Online-Reproduktion zur VerfĂŒgung, indem Sie diesen Link https://u.ant.design/codesandbox-repro verzweigen. Probleme, die mit Need Reproduce sind, werden geschlossen, wenn innerhalb von 7 Tagen keine AktivitĂ€ten stattfinden.

@yesmeck https://codesandbox.io/s/3rxj27q281 Hier ist die Code-Demo. Der erwartete Effekt besteht darin, den Standardwert im dynamischen Feld festzulegen.

Genau wie in der Warnung können Sie den Wert des Felds vor der Registrierung nicht festlegen.Wenn Sie den Wert von names_2 in componentDidMount festlegen, wurde es noch nicht registriert.

Hallo @kerrzhao , wir verwenden GitHub-Probleme, um Fehler zu verfolgen oder PlÀne von Ant Design zu diskutieren. Stellen Sie hier also bitte keine Nutzungsfragen . Sie können versuchen, Fragen zu Stack Overflow oder Segment Fault zu stellen und dann die Tags antd und react auf Ihre Frage anwenden.

setFieldsValue diese Methode aufgerufen wird, ist form nicht registriert, verwenden Sie setFields um @kerrzhao setFields versuchen

Gleiches Problem. Englisch Bitte.

@naefl Wie bereits erwÀhnt, können Sie setFieldsValue nicht aufrufen, bevor das Feld registriert wurde.

@naefl versuche stattdessen 'setFields'

@naefl Wir können stattdessen initialValue verwenden und den Feldwert auf das Beispiel setzen: https://codesandbox.io/s/3rxj27q281

Habe das gleiche Problem:

Tritt gelegentlich auf, aber nie beim ersten Mounten einer Komponente auf React Native.

Das Seltsame daran ist, dass setFieldValues erst nach dem Rendern des Formulars aufgerufen werden sollte.

class Login extends React.Component {
  componentDidMount() {
    this.getStoredSettings()
  }
  getStoredSettings = async () => {
    const canLogin = await getItem('token')
    if (!canLogin) {
      const creds = await getItem('credentials')
      if (creds) {
        // update values with creds
        const { email, password } = JSON.parse(creds)
        try {
          this.props.form.setFieldsValue({
            email,
            password,
          })
        } catch (error) {
          console.log(error)
        }
      }
    }
  }

  render() {
    const { form, initialValues } = this.props
    const { email, password } = initialValues
    const { getFieldProps } = form
    return (
            <Form>
              <InputItem
                {...getFieldProps('email', {
               initialValue: email,
             })}
              />

              <InputItem
                {...getFieldProps('password', {
               initialValue: password,
             })}
                type='password'
              />
            </Form>          
    )
  }
}

const LoginForm = createForm()(Login)

const mapState = (state) => {
  return {
    initialValues: {
      email: __DEV__ ? DEFAULT_EMAIL : '',
      password: __DEV__ ? DEFAULT_PASSWORD : '',
    },
 }
}

export default connect(mapState)(LoginForm)

@gitdust Dosis funktioniert es?

@fenghuizhang es ist Arbeit fĂŒr mich

warum nicht so?
const formData = { name: data.name, title: data.title, desc: data.desc, link: data.link, }; this.props.form.setFieldsValue(formData);
vielleicht ist in deinen feldern eins nicht in der aus

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

Ich habe das gleiche Problem:
Sie können das Feld nicht festlegen, bevor Sie es registriert haben.
aber der Grund wurde endlich gefunden: Ich habe einen Wert fĂŒr Felder gesetzt, die form nicht vorhanden sind, verursachte einen Fehler!
Danke @yanzishang , deine Antwort hat mir bei der Lösung von Problemen sehr geholfen.

Die meisten Etiketten sind falsch

wenn Feld nicht gesetzt, auch Warnung.
Also, erstes Set-Feld, wie: form.getFieldDecorator('fieldName', { initialValue: {} }) in render(),
dann setFieldValue in Ihren Methoden.

bei mir funktioniert es~

Ich habe das gleiche Problem.

Ich denke, es hÀngt damit zusammen, dass der Feldwert ein Objekt ist, wie

Example this.props.form.setFields( { "minAmount-1" : {value : 111} } ); .

Das Feld ist gesetzt. Wenn ich field.hasOwnProperty(myField) mache, wird true zurĂŒckgegeben.

Ich habe das gleiche Problem, der Grund ist, dass Felder, die nicht vorhanden sind, einen Wert haben

@guixuefeng101 das gleiche bei mir

Der Fehler sollte eigentlich sagen:
"Sie können kein Feld festlegen, bevor Sie ein dem Wert zugeordnetes Feld gerendert haben."

"Registrieren" klingt so, als ob das Problem intern im Ant-Framework liegt und fĂŒr neue Entwickler keine Bedeutung hat.

@joeheyming Sie können eine PR senden, um diese Anweisung zu verbessern.

@afc163 irgendwelche

Verwenden Sie den initialValue von getFieldDecorator anstelle von setFields oder setFieldsValue

Ich habe das Àhnliche Problem, aber dank @gitdust hat Ihre Lösung mein Problem perfekt gelöst.
Ich muss den Anfangswert dynamisch setzen, da es viele Bedingungen mit unterschiedlichen Anfangswerten gibt.
Ich habe die Standard-Anfangswert-Prop aufgegeben und stattdessen form.setFields vor der Render-Methode verwendet. Vielen Dank!

Sie können zuerst das Formular so einstellen

{ _.isEmpty(gatherDetail) && this.props.location.state.type === 'edit' ? : Null }

Es gibt nur A und B in der Formkomponente und es gibt ein zusÀtzliches C im Objekt Ihrer Menge

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

funktioniert bei mir, super!

Wie kann man diese Warnung ignorieren?

@kerrzhao Ich versuche setFieldsValue in setState nachdem die Warnung verschwunden und das Problem gelöst ist;

der Code ist unten:

this.setState({ addOptionsList: newAddOptionsList }, () => { setFieldsValue({ [ geÀnderter Inhalt${value} ]: '' }); });

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

sechs sechs sechs

versuche es mit form.getFieldDecorator('fieldName', { initialValue: your_value })

Sie sollten Ihre Felder mit v-decorator im Formular definieren, wie:

<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="description" hasFeedback>
    <a-textarea v-decorator="['description']"/>
</a-form-item>

Dokument kann in dieser Art von wichtiger Botschaft klarer sein.

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

genial

Ich hatte das gleiche Problem, da mein Feldname auf einen zufĂ€lligen Wert "astermihagauvlent" gesetzt ist. Ich habe es behoben, indem ich den Feldnamen in "SchlĂŒssel" geĂ€ndert habe

initialValue wird sich nach dem ersten Rendern nicht Àndern, genau wie defaultValue. Versuchen Sie es in dieser Situation mit setFieldValue oder mapPropsToFields.

Beispiel:
if(this.props.form.getFieldValue('version')){
this.props.form.setFieldsValue({
Version: info.version,
});
}

Sie legen Felder fest, die Sie nicht haben. :)

Die meisten Etiketten sind falsch

Die Wahrheit

@ShMcK bei mir

getFieldsValue ist in Ordnung.

Stellen Sie sicher, dass das Feld vor setFieldsValue registriert wurde
```javascript
const { form } = this.props;
if (undefiniert !== form.getFieldValue('foo')) {
form.setFieldsValue({
foo: 'Hallo Welt',-
});
}
````

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

Danke

FĂŒr mich lag das Problem daran, dass ich setFieldsValue mit einem Objekt mit mehreren Feldern aufgerufen habe, wĂ€hrend mein Formular nur ein Feld hatte.

Hier ist eine Funktion, mit der Sie

const  dataIWantToFillFormWith = { "test1": "dummy data", "test2": "more dummy data" }

Object.keys(form.getFieldsValue()).forEach(key => {
      const obj = {};
      obj[key] = dataIWantToFillFormWith[key] || null;
       setFieldsValue(obj)

Mit dieser Funktion werden alle Felder ignoriert, die im Formular nicht vorhanden sind.

Verwenden Sie den initialValue von getFieldDecorator anstelle von setFields oder setFieldsValue

Sie können resetFields nicht verwenden, setzen Sie es zurĂŒck, wenn Sie den initialValue von getFieldDecorator verwenden

FĂŒr mich lag das Problem daran, dass ich setFieldsValue mit einem Objekt mit mehreren Feldern aufgerufen habe, wĂ€hrend mein Formular nur ein Feld hatte.

Hier ist eine Funktion, mit der Sie

const  dataIWantToFillFormWith = { "test1": "dummy data", "test2": "more dummy data" }

Object.keys(form.getFieldsValue()).forEach(key => {
      const obj = {};
      obj[key] = dataIWantToFillFormWith[key] || null;
       setFieldsValue(obj)

Mit dieser Funktion werden alle Felder ignoriert, die im Formular nicht vorhanden sind.

Dies war die einzige im Universum gefundene Lösung, die funktionierte

Wenn Ihr Formular nicht die von Ihnen festgelegten Felder enthÀlt, wird dieser Fehler angezeigt!

dich lieben

fĂŒr mich habe ich mehrere formen. Der Fehler, den ich gefunden habe, wird nur durch eine falsche Formularinstanz verursacht, deshalb bin ich mir ziemlich sicher, dass das Feld registriert wurde, aber nicht ĂŒber setFieldsValue auf einen Wert gesetzt werden kann. So traurig fĂŒr mich|_|

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen