Closed feibi closed 4 years ago
请看一下正确的写法:https://codesandbox.io/s/antd-radio-group-uwt6g?file=/index.js
我的例子initialValue写的不对,那不是重点。。重点是提交时console.log打印的radio1始终为undefined
确实诡异,测试 antd v4 的 Form 是好的 https://codesandbox.io/s/antd-radio-group-d6o4l?file=/index.js
antd v3 也是好的:https://codesandbox.io/s/antd-radio-group-dc0k1?file=/index.js
应该是 compatible 这个包的问题。
看了下确实是加了 Ref 导致的,需要判断下
如果 Radio.Group
外面包一层 class ,form 又能能够正常赋值。
可查看基于 @feibi 的示例做的变更版本: example
如果
Radio.Group
外面包一层 class ,form 又能能够正常赋值。可查看基于 @feibi 的示例做的变更版本: example
@xyy94813
嗯,根本原因其实在于错误的使用了 Ref
老得 Form item 会 inject Ref(什么原因我不清楚), 而 V4 Antd 的 Radio.Group
会对 options 是 Array 的情况下实行
const radioGroupChildren = options.map( option => <Radio ref={ref} /> )
至于你说的变更例子版本包了一层为什么能用,是因为你没有处理 ref,不信你 forwardRef 一下试试
这也是我存在疑惑的地方, 为什 forwardRef 会传递给所有的 Radio 组件。 这个 ref 的值难道不是一直最终指向最后一个 Radio (RC-CheckBox)组件?
心智上来说一个 Ref 不应该多次使用,但是多次使用导致 v3 Form 的怪异问题,属于边界情况,处理下就行
按我目前的理解,这个问题是由于 Radio.Group
错误使用 ref 的方式导致的。
应该在 Radio.Group
的层面去解决这个问题。
不管是否与 compatible
结合使用,v4 中 Radio.Group
的处理 Ref 的方式都是存在疑问的。
@zombieJ 帮忙看下这个
这个 group 的 ref fix 有点问题,它本身不需要支持 ref: https://github.com/ant-design/ant-design/pull/25328#issuecomment-653604137
Reproduction link
Steps to reproduce
@ant-design/compatible
导入antd
导入class MyForm extends React.Component { render() { const { form } = this.props; return ( <Form onSubmit={e => { e.preventDefault(); form.validateFieldsAndScroll((err, values) => { if (!err) { console.log("values", values); } }); }}
const AForm = Form.create()(MyForm); ReactDOM.render( , document.getElementById("container"));