<Form
layout="vertical"
size="medium"
className="test-form"
requiredMark={false}
onFinish={onFinish}
>
<Form.Item
name="companyId"
label="Company/Customer"
rules={[{ required: true, message: "Please select Company!"}]}
>
<Select
onChange={this.handleSelectCompanyOnchange}
style={{ width: "50%" }}
name="companyId"
>
{users.map((user, index) => {
return (
<Option key={index} value={user.companyID}>
{user.companyName}
</Option>
);
})}
</Select>
</Form.Item>
<Form.Item
label="Products"
name="products"
rules={[{ required: true, message: "Please select Products!"}]}
>
<Select mode="multiple" allowClear style={{ width: "70%" }}>
{products.map((product, index) => {
if (this.state.companyId == product.companyId) {
return (
<Option key={index} value={product.id}>
{product.productName}
</Option>
);
}
})}
</Select>
</Form.Item>
</Form>
我试图在Products Select中实现Options元素根据Company Select onChange选择的变化。
我已经在Select中指定了onChange并调用this.handleSelectCompanyOnchange。在其中我获得了选定的公司ID。
在这个.state.companyId中,我手动设置了companyId,我将删除它。
我真的是新的Ant Design,不能想出如何更新产品列表,一旦公司被选中。
在这里,用户和产品都是json如下图。
users:
[{
companyID: 2
companyName: "TEST1"
},{
companyID: 7
companyName: "TEST2"
}]
products:
[{
companyId: 2
id: 1
productName: "TESTProduct1"
},{
companyId: 7
productName: "TESTProduct2"
id: 2
},{
companyId: 7
id: 3
productName: "TESTProduct3"
},{
companyId: 7
id: 4
productName: "TESTProduct4"
}]
但是,我已经尝试了getValueFromEvent,但无法实现这一点。我使用Ant设计表单和选择来实现这一点。此外,我还引用了https://github.com/ant-design/ant-design/issues/4862和how to get field value on change for FormItem in antd
3条答案
按热度按时间v1l68za41#
这里是你需要实现它。
1.使用
Form
的onValuesChange
属性。当涉及到Form
字段更改时,这是执行setState的最佳位置,而不是在Select
或Input
onChange
上。1.一个表单示例(钩子)。这在您的情况下是可选的,但是这在设置和获取表单值时很有用。在这里查看更多关于它的信息。
这是产品选项render的外观,
map
和filter
的组合,其中selectedCompanyId
来自state。注意,如果列表的固定长度未知,不要使用索引作为key
,React会对此产生混乱,您将得到一些逻辑错误。使用一些唯一的id。这是
handleFormValuesChange
下面是react hooks中的完整工作代码:
tkclm6bt2#
这里的想法是你只需要观察状态中的值的变化。2例如,你的select应该“观察”状态的值,然后你可以通过它自己的React的setState方法轻松地更新状态。3在onChange事件中,你可以简单地对我们的状态做一些事情。
下面是我的示例代码,我是如何在每次重新选择周选择时更新日期的。希望这能对你有所帮助。
uurity8g3#
让我们说你想更新你的选项列表的基础上,你从后端获得的数据;注意:categories是一个数组对象。2从这个数组中你可以取出每个选项的标签和值,如下所示:
//然后在表单内使用newOptions,如下所示: