Ant-design-pro: 🧐[问题] 求助!在 Form 中使用了 model.state 数据,应该怎么使用?

Created on 9 May 2020  ·  3Comments  ·  Source: ant-design/ant-design-pro

🧐 问题描述

创建订单,购物车用的是 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>

💻 示例代码

🚑 其他信息

🕵🏻‍♀️ question

Most helpful comment

Form组件并不会监听initialValues,只会在初次挂载时读取并渲染
看你的代码好像是把表单数据存储在redux中,通过更新redux中的数据来更改表单,那么你需要监听items通过setFieldsValue来更新表单数据。
不过,通常不会这样去做,对表单数据的修改应该由Form来控制,建议去看看Form的文档

All 3 comments

目前想到的一个方案是 给 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 数据。不知道这个做法是否 “正道”? 还有更妥当的做法吗?

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Jerry-goodboy picture Jerry-goodboy  ·  3Comments

cheung1111 picture cheung1111  ·  3Comments

renyi818 picture renyi818  ·  3Comments

yjz1004 picture yjz1004  ·  3Comments

happier2 picture happier2  ·  3Comments