antd design select 占位符问题
antd design select placeholder issues
我在我的 React 应用程序中使用 antd design。
这是我遇到问题的代码片段:
<Select
showSearch
optionFilterProp = "children"
placeholder = "Select Company"
value = "{this.state.company}"
name = "company"
onSelect = "{this.handleCompanyChange}"
>
现在,如果 this.state.company
不是 null
,它会显示选择的正确值。但如果 this.state.company
是 empty
或 null
,则不会显示占位符。
如何解决这个问题,以便在 value
为 null 时显示占位符?
将 this.state.company 设置为未定义而不是 null。
如果您正在使用 Antd 的 Form.create(),那么还有另一种很酷的方法来 set/get 表单的值。请注意,在此方法中,组件(Select 和其他组件)必须位于 <Form>
元素内。另外,封闭的 class 应该作为 props 传入 Form.create() 对象,如下所示:
export default connect(mapStateToProps, mapDispatchToProps)(Form.create()(YourClassName));
这样我们就可以在道具中使用 this.props.form。这里面会有一个重要的函数getFieldDecorator,如下图:
const { getFieldDecorator } = this.props.form;
每个 Input 组件都必须包裹在 中,见下文:
<FormItem>
{ getFieldDecorator('prefix', {
initialValue: '86',
})(
<Select style={{ width: 70 }}>
<Option value="86">+86</Option>
<Option value="87">+87</Option>
</Select>
);}
</FormItem>
正如您在上面看到的,这是为表单元素设置初始值的更简单的方法。
请注意,有时当您需要以编程方式在函数中设置表单元素的值时,您可以使用 setFieldsValue、setFields 等.
在使用getFieldsValue getFieldValue setFieldsValue 等之前,请确保相应的字段已经注册到getFieldDecorator。
有关协调控制的更多信息,请参阅 https://ant.design/components/form/?locale=en-US#Form-fields。
示例:
componentDidMount() {
if (someCheckHere){
this.props.form.setFieldsValue({
company: userData.companyName
})
}
}
应该设置为undefined
而不是null
或""
空字符串。
this.props.form.setFieldsValue({
myFieldName: undefined
})
我遇到了同样的问题,解决方法如下:
ant design 的代码片段 select
<Select key="1" value={this.getStateValue()} showSearch allowClear placeholder='Select Weight' onChange={onWeightChange}>
{options}
</Select>
其中 getStateValue 将是这样的:
getStateValue = () => {
const { value } = this.state;
if (value) {
return value;
}
}
检查发布的图片,您需要定位名称并尝试将其设置为 null,如果它是空字符串,这应该有效。
你应该更新如下:
<Select
showSearch
optionFilterProp = "children"
placeholder = "Select Company"
value = {this.state.company || undefined} ---- update this line
name = "company"
onSelect = "{this.handleCompanyChange}"
>
我改自:
const [value, updateValue] = useState("");
收件人:
const [value, updateValue] = useState(undefined);
成功了!
我在我的 React 应用程序中使用 antd design。
这是我遇到问题的代码片段:
<Select
showSearch
optionFilterProp = "children"
placeholder = "Select Company"
value = "{this.state.company}"
name = "company"
onSelect = "{this.handleCompanyChange}"
>
现在,如果 this.state.company
不是 null
,它会显示选择的正确值。但如果 this.state.company
是 empty
或 null
,则不会显示占位符。
如何解决这个问题,以便在 value
为 null 时显示占位符?
将 this.state.company 设置为未定义而不是 null。
如果您正在使用 Antd 的 Form.create(),那么还有另一种很酷的方法来 set/get 表单的值。请注意,在此方法中,组件(Select 和其他组件)必须位于 <Form>
元素内。另外,封闭的 class 应该作为 props 传入 Form.create() 对象,如下所示:
export default connect(mapStateToProps, mapDispatchToProps)(Form.create()(YourClassName));
这样我们就可以在道具中使用 this.props.form。这里面会有一个重要的函数getFieldDecorator,如下图:
const { getFieldDecorator } = this.props.form;
每个 Input 组件都必须包裹在 中,见下文:
<FormItem>
{ getFieldDecorator('prefix', {
initialValue: '86',
})(
<Select style={{ width: 70 }}>
<Option value="86">+86</Option>
<Option value="87">+87</Option>
</Select>
);}
</FormItem>
正如您在上面看到的,这是为表单元素设置初始值的更简单的方法。
请注意,有时当您需要以编程方式在函数中设置表单元素的值时,您可以使用 setFieldsValue、setFields 等.
在使用getFieldsValue getFieldValue setFieldsValue 等之前,请确保相应的字段已经注册到getFieldDecorator。 有关协调控制的更多信息,请参阅 https://ant.design/components/form/?locale=en-US#Form-fields。 示例:
componentDidMount() {
if (someCheckHere){
this.props.form.setFieldsValue({
company: userData.companyName
})
}
}
应该设置为undefined
而不是null
或""
空字符串。
this.props.form.setFieldsValue({
myFieldName: undefined
})
我遇到了同样的问题,解决方法如下: ant design 的代码片段 select
<Select key="1" value={this.getStateValue()} showSearch allowClear placeholder='Select Weight' onChange={onWeightChange}>
{options}
</Select>
其中 getStateValue 将是这样的:
getStateValue = () => {
const { value } = this.state;
if (value) {
return value;
}
}
检查发布的图片,您需要定位名称并尝试将其设置为 null,如果它是空字符串,这应该有效。
你应该更新如下:
<Select
showSearch
optionFilterProp = "children"
placeholder = "Select Company"
value = {this.state.company || undefined} ---- update this line
name = "company"
onSelect = "{this.handleCompanyChange}"
>
我改自:
const [value, updateValue] = useState("");
收件人:
const [value, updateValue] = useState(undefined);
成功了!