Ant-design: Вы не можете установить поле до его регистрации, если установите значение для элемента динамической формы

Созданный на 9 янв. 2018  ·  48Комментарии  ·  Источник: ant-design/ant-design

Версия

3.1.1

Среда

MAC 、 хром 63.0.3239.84 (64) 、 antd 3.1.1

Ссылка для воспроизведения

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

Действия по воспроизведению

Значение набора элементов динамической формы,
`const formItems = keys.map ((k, index) => {
возвращение (
{... formItemLayoutWithOutLabel}
required = {true}
ключ = {k}
>
{getFieldDecorator (minAmount - $ {k}, {
правила: [{
требуется: true,
сообщение: "请 输入 大于 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} } ); .

Что ожидается?

Задайте значение как общие поля.

Что на самом деле происходит?

Вы не можете установить поле до его регистрации.


При редактировании данных строки и установке данных в элемент динамической формы.

Самый полезный комментарий

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

Все 48 Комментарий

Привет @kerrzhao. Пожалуйста, предоставьте онлайн-копию, разветвив эту ссылку https://u.ant.design/codesandbox-repro. Проблемы с пометкой Need Reproduce будут закрыты, если в течение 7 дней не будет выполнено никаких действий.

@yesmeck https://codesandbox.io/s/3rxj27q281 Вот демонстрация кода. Ожидаемый эффект - установить значение по умолчанию в динамическом поле.

Как и в предупреждении, вы не можете установить значение поля до регистрации.Когда вы устанавливаете значение names_2 в componentDidMount, оно еще не было зарегистрировано.

Привет @kerrzhao , мы используем выпуски GitHub, чтобы отслеживать ошибки или обсуждать планы Ant Design. Поэтому, пожалуйста , не задавайте здесь переполнении стека или ошибке сегмента , а затем применить к своему вопросу теги antd и react .

setFieldsValue вызове этого метода form не зарегистрирован, используйте setFields попробовать @kerrzhao

Та же проблема. По английски пожалуйста.

@naefl Как указано в предупреждении, вы не можете вызвать setFieldsValue до того, как поле будет зарегистрировано.

@naefl попробуйте вместо этого 'setFields'

@naefl Вместо этого мы можем использовать initialValue и установить в качестве значения поля пример: https://codesandbox.io/s/3rxj27q281

Имея ту же проблему:

Происходит иногда, но никогда в первый раз, когда компонент монтируется в React Native.

Что странно в этом, так это то, что setFieldValues следует вызывать только после того, как форма была отрисована.

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 доза работает?

@fenghuizhang это работает для меня

почему не так?
const formData = { name: data.name, title: data.title, desc: data.desc, link: data.link, }; this.props.form.setFieldsValue(formData);
может быть, в ваших полях нет одного из

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

У меня такая же проблема:
Вы не можете установить поле до его регистрации.
но причина была наконец найдена: я установил значение для полей, форма которых не существует, что привело к появлению ошибки!
Спасибо @yanzishang , ваш ответ очень помог мне в решении проблем.

Большинство ярлыков ошибочны

если поле не задано, тоже предупреждение.
Итак, сначала установите поле, например: form.getFieldDecorator('fieldName', { initialValue: {} }) в render (),
затем установитеFieldValue в своих методах.

это работает для меня ~

У меня такая же проблема.

Я думаю, это связано с тем, что значение поля является объектом, как сказал @kerrzhao :

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

Поле установлено. если я делаю fields.hasOwnProperty (myField), он возвращает true.

У меня такая же проблема, причина в том, что значение для полей, которые формируются, не существует

@ guixuefeng101 то же самое со мной

Ошибка действительно должна говорить:
«Вы не можете установить поле до визуализации поля, связанного со значением».

«Регистрация» звучит так, как будто проблема является внутренней по отношению к среде Ant и не имеет значения для новых разработчиков.

@joeheyming Вы можете отправить PR, чтобы улучшить эту инструкцию.

@ afc163 есть указатели на то, где это сообщение? Я не могу найти это

используйте initialValue getFieldDecorator вместо setFields или setFieldsValue

У меня аналогичная проблема, но благодаря @gitdust ваше решение отлично решило мою проблему.
Мне нужно установить начальное значение динамически, потому что есть много условий с разным начальным значением.
Я отказался от опоры начального значения по умолчанию, вместо этого используйте form.setFields перед методом рендеринга. Спасибо!

вы можете сначала установить форму, например

{_.isEmpty (gatherDetail) && this.props.location.state.type === 'edit'? : нулевой }

В компоненте формы есть только A и B, а в объекте вашего набора есть дополнительный C

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

у меня работает, отлично!

Как игнорировать это предупреждение?

@kerrzhao Я пытаюсь вставить setFieldsValue в setState после чего предупреждение исчезнет, ​​и проблема решена;

код ниже:

this.setState({ addOptionsList: newAddOptionsList }, () => { setFieldsValue({ [ modifyedContent $ {значение} ]: '' }); });

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

шесть шесть шесть

попробуйте form.getFieldDecorator('fieldName', { initialValue: your_value })

вы должны определить свои поля с помощью v-decorator в форме, например:

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

документ может быть более ясным в таком важном сообщении.

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

классно

У меня была та же проблема, что и для имени моего поля задано случайное значение astermihagauvlent, я исправил это, изменив имя поля на «ключи»

initialValue не изменится после первого рендеринга, как и defaultValue. В этой ситуации попробуйте setFieldValue или mapPropsToFields.

пример:
if (this.props.form.getFieldValue ('версия')) {
this.props.form.setFieldsValue ({
версия: info.version,
});
}

вы устанавливаете поля, которых у вас нет. :)

Большинство ярлыков ошибочны

Правда

@ShMcK, у меня работает, спасибо большое :)

getFieldsValue в порядке.

Убедитесь, что поле зарегистрировано до setFieldsValue
`` javascript
const {форма} = this.props;
if (undefined! == form.getFieldValue ('foo')) {
form.setFieldsValue ({
foo: 'привет, мир',
});
}
`` ''

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

Спасибо

Для меня проблема была связана с тем, что я вызвал setFieldsValue с объектом, у которого было несколько полей, в то время как моя форма имела только одно поле.

Вот функция, которую вы можете использовать для

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

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

Используя эту функцию, он проигнорирует любые поля, которые не существуют в форме.

используйте initialValue getFieldDecorator вместо setFields или setFieldsValue

вы не можете использовать resetFields, сбросив его, когда используете initialValue getFieldDecorator

Для меня проблема была связана с тем, что я вызвал setFieldsValue с объектом, у которого было несколько полей, в то время как моя форма имела только одно поле.

Вот функция, которую вы можете использовать для

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

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

Используя эту функцию, он проигнорирует любые поля, которые не существуют в форме.

Это было единственное решение, найденное во вселенной, которое сработало с использованием хуков с эффектом.

если в вашей форме нет полей, которые вы задали, появится эта ошибка!

люблю вас

для меня у меня есть несколько форм. Обнаруженная мной ошибка просто вызвана неправильным экземпляром формы, поэтому я уверен, что поле было зарегистрировано, но не может быть установлено значение с помощью setFieldsValue . Мне так грустно | _ |

Была ли эта страница полезной?
0 / 5 - 0 рейтинги