<input />标记上的prop`value`的值无效

时间:2018-11-07 11:36:46

标签: reactjs antd

我收到无法解决的警告:

  

标签上的道具value的值无效。要么将其从   元素,或传递字符串或数字值以将其保留在DOM中。   详情

以下是我正在使用的代码:

<FormItem validateStatus={NameError ? "error" : ""} help={NameError || ""}>
  {getFieldDecorator("Name", {
    initialValue: (()=>{this.state.Data.Name}),
    rules: [{ required: true, message: "Please input the component name!" }]
  })(
    <Input
      className="form-control"
      type="text"
      name="Name"
      defaultValue={this.state.Data.Name}
      onChange={this.onChange}
    />
  )}
</FormItem>

我的打字稿界面看起来像这样:

export interface IFieldEdition{
    Data:IFieldData
}

export interface IFieldData{
    Id?:number,
    Name?:string,
    Value?:string,
    Description?:string,
    CreatedDate?:Date,
    CreatedBy?:string,
    StatusId?: number
}

我该如何解决?有任何线索吗?

3 个答案:

答案 0 :(得分:4)

我看到您正在使用antd表单。来自antd形式的official document

  

由getFieldDecorator包装后,值(或由   valuePropName)onChange(或触发器定义的其他属性)道具   将添加到表单控件中,将处理表单数据流   按表格将导致:

     

您不应该手动调用setState,请使用   this.props.form.setFieldsValue以编程方式更改值。

您使用initialValue: (()=>{this.state.Data.Name}调用setState可能是导致此错误的原因。

答案 1 :(得分:2)

不确定<IS_HOME>/repository/conf/identity/identity.xml <IS_HOME>/repository/deployment/server/eventpublishers/IsAnalytics-Publisher-wso2event-* 的工作方式,但似乎是问题出在,您正在传递作为getFieldDecorator道具的函数。

尝试将initialValue替换为initialValue: (()=>{this.state.Data.Name})

答案 2 :(得分:0)

使用输入创建表单时,我已经看到此错误,对于我来说,解决方案非常简单:

    <input 
      type="text" 
      value={this.state.term} 
      onChange={(e) => this.setState({ term: e.target.value.toLocaleUpperCase() })}
    />

发生了什么事,我只是忘记了调用该方法,却像这样:

toLocaleUpperCase

因此,不要忘记任何函数调用末尾的括号。希望这会有所帮助。