3.1.1
MAC 、chrome 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) => {
返回 (
必需={真}
键={k}
>
{getFieldDecorator( minAmount-${k} , {
规则:[{
要求:真实,
message: "请输入大于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}
}
);
。
将值设置为公共字段。
您不能在注册之前设置字段。
编辑行数据并将数据设置为动态表单项时。
你好@kerrzhao。 请通过分叉此链接https://u.ant.design/codesandbox-repro 来提供在线复制Need Reproduce
将被关闭。
@yesmeck https://codesandbox.io/s/3rxj27q281 这里是代码演示。 预想效果是往动态框里设置默认值。
就像警告说的,你不能在 field 注册前去设置它的值,你在 componentDidMount 里设置 names_2
的值的时候,它还没有被注册。
你好@kerrzhao ,我们使用 GitHub 问题来跟踪错误或讨论 Ant Design 的计划。 所以,请不要在这里Stack Overflow或Segment Fault上提问,然后将标签antd
和react
应用于您的问题。
setFieldsValue
这个方法调用的时候,form
没有注册,使用setFields
试试看 @kerrzhao
同样的问题。 请用英语。
@naefl正如警告所述,您不能在注册字段之前调用setFieldsValue
。
@naefl尝试使用“setFields”代替
@naefl我们可以改用initialValue
并将字段值设置为状态示例: https :
有同样的问题:
偶尔发生,但绝不会是第一次在 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);
也许是你的领域有一个不在 from
如果您的表单没有您设置的这些字段,则会出现此错误!
我有同样的问题:
您不能在注册之前设置字段。
但是终于找到原因了
谢谢@yanzishang ,你的回答给了我解决问题的很大帮助。
多数是写错label了
如果未设置字段,也会发出警告。
所以,首先设置字段,例如: form.getFieldDecorator('fieldName', { initialValue: {} })
in render(),
然后在你的方法中 setFieldValue 。
对我有用~
我有同样的问题。
我认为这与字段值是像@kerrzhao所说的对象
Example this.props.form.setFields( { "minAmount-1" : {value : 111} } ); .
该字段已设置。 如果我做 fields.hasOwnProperty(myField) 它返回真。
我有同样的问题,原因是,为表单不存在的字段设置一个值
@guixuefeng101跟我一样
错误应该说:
“在呈现与值关联的字段之前,您不能设置字段。”
“注册”听起来像是 Ant 框架内部的问题,对新开发人员没有意义。
@joeheyming您可以发送 PR 来改进该指令。
@afc163任何指向此消息位置的指针? 我找不到
使用 getFieldDecorator 的 initialValue 代替 setFields 或 setFieldsValue
我有类似的问题,但多亏了@gitdust ,您的解决方案完美地解决了我的问题。
我需要动态设置初始值,因为有许多不同初始值的条件。
我放弃了默认的初始值 prop,在渲染方法之前使用 form.setFields 代替。 谢谢!
你可以先设置表格,像这样
表单组件里只有A和B,而你set的对象里多了一个C
如果您的表单没有您设置的这些字段,则会出现此错误!
对我有用,太棒了!
如何忽略此警告?
@kerrzhao我试图将setFieldsValue
放入setState
之后,警告消失,问题解决;
代码如下:
this.setState({
addOptionsList: newAddOptionsList
},
() => {
setFieldsValue({
[
modifiedContent${value} ]: ''
});
});
如果您的表单没有您设置的这些字段,则会出现此错误!
六六六
试试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”,我通过将字段名称更改为“keys”来修复它
initialValue 在第一次渲染后不会改变,就像 defaultValue 一样。 在这种情况下尝试 setFieldValue 或 mapPropsToFields。
例子:
if(this.props.form.getFieldValue('version')){
this.props.form.setFieldsValue({
版本:info.version,
});
}
您设置了一个您没有的字段。 :)
多数是写错label了
真相了
@ShMcK对我
getFieldsValue 即可。
确保字段在setFieldsValue
之前注册
```javascript
const { form } = 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)
使用该函数,它将忽略表单中不存在的任何字段。
使用 getFieldDecorator 的 initialValue 代替 setFields 或 setFieldsValue
使用 getFieldDecorator 的 initialValue 时,您不能使用 resetFields 重置它
对我来说,问题是由于我使用一个具有多个字段的对象调用 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)
使用该函数,它将忽略表单中不存在的任何字段。
这是在宇宙中找到的唯一可以使用 useEffect 钩子的解决方案
如果您的表单没有您设置的这些字段,则会出现此错误!
爱你
对我来说,我有多种形式。 我发现的错误只是由错误的表单实例引起的,这就是为什么我非常确定该字段已被注册,但无法通过setFieldsValue
设置值。 真为我难过|_|
最有用的评论
如果您的表单没有您设置的这些字段,则会出现此错误!