Ant-design: Anda tidak dapat mengatur bidang sebelum mendaftarkannya saat mengatur nilai ke item formulir dinamis

Dibuat pada 9 Jan 2018  ·  48Komentar  ·  Sumber: ant-design/ant-design

Versi: kapan

3.1.1

Lingkungan

MAC chrome 63.0.3239.84 (64)、 dan 3.1.1

Tautan reproduksi

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

Langkah-langkah untuk mereproduksi

Nilai set item formulir dinamis,
` const formItems = keys.map((k, indeks) => {
kembali (
{...formItemLayoutWithOutLabel}
diperlukan={benar}
kunci={k}
>
{getFieldDecorator( minAmount-${k} , {
aturan: [{
diperlukan: benar,
pesan: "请输入大于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} } ); .

Apa yang diharapkan?

Tetapkan nilai sebagai bidang umum.

Apa yang sebenarnya terjadi?

Anda tidak dapat mengatur bidang sebelum mendaftarkannya.


Saat mengedit data baris dan mengatur data ke item formulir dinamis.

Usage

Komentar yang paling membantu

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

Semua 48 komentar

Halo @kerrzhao. Harap berikan reproduksi online dengan mem-forking tautan ini https://u.ant.design/codesandbox-repro. Masalah yang diberi label Need Reproduce akan ditutup jika tidak ada aktivitas dalam 7 hari.

@yesmeck https://codesandbox.io/s/3rxj27q281 Ini demo kodenya. Efek yang diharapkan adalah menetapkan nilai default di kotak dinamis.

Sama seperti peringatan, Anda tidak dapat mengatur nilai bidang sebelum mendaftar.Ketika Anda menetapkan nilai names_2 di componentDidMount, itu belum terdaftar.

Halo @kerrzhao , kami menggunakan masalah GitHub untuk melacak bug atau mendiskusikan rencana Ant Design. Jadi, tolong jangan ajukan pertanyaan penggunaan di sini. Anda dapat mencoba mengajukan pertanyaan tentang Stack Overflow atau Segment Fault , lalu menerapkan tag antd dan react pada pertanyaan Anda.

setFieldsValue metode ini dipanggil, form tidak terdaftar, gunakan setFields mencoba @kerrzhao

Permasalahan yang sama. bahasa inggris tolong.

@naefl Seperti yang dinyatakan peringatan, Anda tidak dapat memanggil setFieldsValue sebelum bidang didaftarkan.

@naefl coba 'setFields' sebagai gantinya

@naefl Kita dapat menggunakan initialValue sebagai gantinya dan mengatur nilai bidang untuk menyatakan contoh: https://codesandbox.io/s/3rxj27q281

Memiliki masalah yang sama ini:

Kadang-kadang terjadi, tetapi tidak pernah pertama kali komponen dipasang di React Native.

Apa yang aneh tentang ini, adalah bahwa setFieldValues hanya boleh dipanggil dengan baik setelah formulir dirender.

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 berhasil?

@fenghuizhang ini bekerja untuk saya

kenapa tidak seperti ini?
const formData = { name: data.name, title: data.title, desc: data.desc, link: data.link, }; this.props.form.setFieldsValue(formData);
mungkin bidang Anda tidak memilikinya dari

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

Saya memiliki masalah yang sama ini:
Anda tidak dapat mengatur bidang sebelum mendaftarkannya.
tetapi alasannya akhirnya ditemukan:Saya menetapkan nilai ke bidang yang formulirnya tidak ada, menyebabkan kesalahan muncul!
Terima kasih @yanzishang , jawaban Anda memberi saya bantuan besar dalam memecahkan masalah.

Sebagian besar labelnya salah

jika bidang tidak disetel, peringatan juga.
jadi, setel bidang pertama, seperti: form.getFieldDecorator('fieldName', { initialValue: {} }) di render(),
lalu setFieldValue dalam metode Anda.

itu bekerja untuk saya ~

Saya mengalami masalah yang sama.

Saya pikir ini terkait dengan nilai bidang yang menjadi objek seperti yang dikatakan @kerrzhao :

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

Lapangan diatur. jika saya melakukan field.hasOwnProperty(myField) itu mengembalikan true.

saya memiliki masalah yang sama, alasannya adalah, menetapkan nilai ke bidang yang formulirnya tidak ada

@guixuefeng101 sama dengan saya

Kesalahan harus benar-benar mengatakan:
"Anda tidak dapat menyetel bidang sebelum merender bidang yang terkait dengan nilai."

"Mendaftar" terdengar seperti masalah internal pada kerangka kerja Ant, dan tidak ada artinya bagi pengembang baru.

@joeheyming Anda dapat mengirim PR untuk meningkatkan instruksi itu.

@afc163 ada petunjuk di mana pesan ini? Saya tidak dapat menemukannya

gunakan initialValue getFieldDecorator sebagai ganti setFields atau setFieldsValue

Saya memiliki masalah serupa, tetapi terima kasih kepada @gitdust , solusi Anda menyelesaikan masalah saya dengan sempurna.
Saya perlu mengatur nilai awal dinamis, karena ada banyak kondisi dengan nilai awal yang berbeda.
Saya mengabaikan prop nilai awal default, gunakan form.setFields sebelum metode render. Terima kasih!

Anda dapat mengatur formulir terlebih dahulu, seperti ini

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

Hanya ada A dan B dalam komponen bentuk, dan ada tambahan C di objek himpunan Anda

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

bekerja untuk saya, bagus!

Bagaimana cara mengabaikan peringatan ini?

@kerrzhao Saya mencoba memasukkan setFieldsValue di setState setelahnya, peringatan itu hilang dan masalah terpecahkan;

kode di bawah ini:

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

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

enam enam enam

coba form.getFieldDecorator('fieldName', { initialValue: your_value })

anda harus mendefinisikan bidang Anda dengan v-decorator dalam bentuk, seperti:

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

dokumen bisa lebih jelas dalam pesan penting semacam ini.

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

luar biasa

saya memiliki masalah yang sama karena nama bidang saya disetel ke nilai acak 'astermihagauvlent', saya memperbaikinya dengan mengubah nama bidang menjadi 'kunci'

initialValue tidak akan berubah setelah render pertama, seperti defaultValue. Coba setFieldValue atau mapPropsToFields dalam situasi ini.

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

Anda mengatur bidang yang tidak Anda miliki. :)

Sebagian besar labelnya salah

Kebenaran

@ShMcK ini bekerja untuk saya, terima kasih banyak

getFieldsValue baik-baik saja.

Pastikan field terdaftar sebelum setFieldsValue
```javascript
const { formulir } = this.props;
if (tidak terdefinisi !== form.getFieldValue('foo')) {
form.setFieldsValue({
foo: 'halo dunia',
});
}
````

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

Terima kasih

Bagi saya, masalahnya adalah karena saya memanggil setFieldsValue dengan objek yang memiliki beberapa bidang, sedangkan formulir saya hanya memiliki satu bidang.

Berikut adalah fungsi yang dapat Anda gunakan untuk

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

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

Menggunakan fungsi itu, itu akan mengabaikan bidang apa pun yang tidak ada dalam formulir.

gunakan initialValue getFieldDecorator sebagai ganti setFields atau setFieldsValue

anda tidak dapat menggunakan resetFields, reset saat menggunakan initialValue getFieldDecorator

Bagi saya, masalahnya adalah karena saya memanggil setFieldsValue dengan objek yang memiliki beberapa bidang, sedangkan formulir saya hanya memiliki satu bidang.

Berikut adalah fungsi yang dapat Anda gunakan untuk

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

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

Menggunakan fungsi itu, itu akan mengabaikan bidang apa pun yang tidak ada dalam formulir.

Ini adalah satu-satunya solusi yang ditemukan di alam semesta yang bekerja menggunakan kait Efek

jika formulir Anda tidak memiliki bidang yang Anda tetapkan, kesalahan ini akan muncul!

aku mencintaimu

bagi saya, saya memiliki beberapa bentuk. Kesalahan yang saya temukan hanya disebabkan oleh contoh formulir yang salah, itu sebabnya saya cukup yakin bahwa bidang tersebut telah terdaftar, tetapi tidak dapat ditetapkan nilainya melalui setFieldsValue . Sangat sedih untukku|_|

Apakah halaman ini membantu?
0 / 5 - 0 peringkat