创建订单,购物车用的是 model,当我删除 state 数据时,界面购物车并不会变化(实际上已经删除了),这种情况应该怎么做? 购物车数据是否不应该放到 Form.Item?那验证应该怎么做?
export default connect(({ loading, cart }) => ({
items: cart.addedItems,
submitting: loading.effects['order/submit'],
}))(OrderCreate);
const { items } = props;
<Form initialValues={{ items }}>
<Form.Item
name="items"
rules={[{ required: true, message: '必选项' }]}
>
<Cart />
</Form.Item>
目前想到的一个方案是 给 Form.Item 弄一个假的字段 puppetItems,然后自定义一个验证规则 validator: checkCart;在提交表单时,再自行补上 items,不知道是否有更好的做法?请大侠们指点迷津 ~
const checkCart = () => {
if (items.length > 0) {
return Promise.resolve();
}
return Promise.reject(new Error('必选项'));
}
Form组件并不会监听initialValues,只会在初次挂载时读取并渲染
看你的代码好像是把表单数据存储在redux中,通过更新redux中的数据来更改表单,那么你需要监听items通过setFieldsValue来更新表单数据。
不过,通常不会这样去做,对表单数据的修改应该由Form来控制,建议去看看Form的文档
数据的修改应该由Form
嗯,只有购物车数据是放到了 state,我现在做法是在表单内弄了个 “虚拟”字段,增加自定义校验,去检查 state 数据。不知道这个做法是否 “正道”? 还有更妥当的做法吗?
Most helpful comment
Form组件并不会监听
initialValues,只会在初次挂载时读取并渲染看你的代码好像是把表单数据存储在redux中,通过更新redux中的数据来更改表单,那么你需要监听
items通过setFieldsValue来更新表单数据。不过,通常不会这样去做,对表单数据的修改应该由Form来控制,建议去看看Form的文档