【发布时间】:2020-07-15 11:07:51
【问题描述】:
我希望根据 antd 表单中另一个的选定值来隐藏一个输入字段。我指的是this question (看看有些人如何支持(并接受)this answer。但是,它对我不起作用。也许是因为我在动态表单设置中使用它?
无论如何,这是我的代码(我试图在status 的基础上隐藏business_name 字段):
<Form initialValues={{relative: [{"status": "Business", "business_name": "ABC inc"}, {"status": "Studying"}]}}>
<Form.List name="relative">
{(fields, {add, remove}) => {
return (
<div>
{fields.map(field => (
<div>
<Form.Item
{...field}
name={[field.name, 'status']}
fieldKey={[field.fieldKey, 'status']}>
<Select>{["Business", "Studying"].map(status => (<Option value={status.value}>{status.label}</Option>))}</Select>
</Form.Item>
<Form.Item
{...field}
style={status === 'Business' ? {display: 'inline'} : {display: 'none'}}
name={[field.name, 'business_name']}
fieldKey={[field.fieldKey, 'business_name']}>
<Input placeholder="Business Name"/>
</Form.Item>
</div>))}
</div>)}}
</Form.List>
</Form>
感谢您的阅读。任何帮助将不胜感激。
【问题讨论】:
-
要隐藏哪个字段,基于哪个变量?
-
@LukeStorry 在问题中也得到了澄清 - 我试图在
status的基础上隐藏business_name字段 -
而您的
style={status === 'Business' ? {display: 'inline'} : {display: 'none'}}代码不起作用?在 chrome 中打开 Inspector 时的样式是什么样的? -
它总是评估为假。如,检查员显示
display: 'none'(当我将条件翻转为status !== 'Business'时,它总是显示display: 'inline')基本上,我认为它没有获取status的值。 -
您的组件代码格式错误,我几乎可以肯定
status未定义为书面形式。请修改下面的 CodeSandbox 链接以提供您的组件的最小工作示例,以便我可以提供额外的反馈。 codesandbox.io/s/malformed-dynamic-form-component-blfr2