[Field]自定义组件在unmount后,还是校验了 #3962
作者:互联网
Comments
cwtuan commented 15 days ago
ComponentField Reproduction linkhttps://riddle.alibaba-inc.com/riddles/27d1ebab import ReactDOM from 'react-dom'; import React from 'react'; import { Input, Button, Checkbox, Field,Form,Select } from '@alifd/next'; const CheckboxGroup = Checkbox.Group; const dataSource=[1,2,3]; const MySelect = (props) => { return <Select {...props}/> } class App extends React.Component { field = new Field(this, {scrollToFirstError: -10}); notEmpty(rule, value) { if (!value || value.length==0) { return Promise.reject("必选"); } else { return Promise.resolve(null); } } render() { const init = this.field.init; return (<div className="demo"> <Form field={this.field}> <Form.Item> <Input {...init('input', { })} /> </Form.Item> { this.field.getValue('input') && <> <Form.Item> <Select multiple dataSource={dataSource} {...init('next_select', { rules: [{validator: this.notEmpty}] })} /> </Form.Item> <Form.Item> <MySelect multiple dataSource={dataSource} {...init('my_select', { rules: [{validator: this.notEmpty}] })} /> </Form.Item> </> } </Form> <br/> <Button type="primary" onClick={() => { this.field.validatePromise().then(({errors, values}) => { console.warn('aaa errors',errors); console.log('aaa values',values) }); }}>validate</Button> </div>); } } ReactDOM.render(<App/>, mountNode); Steps to reproduce
next_select是fusion原生组件,my_select只是包装成自定义组件(但里面也是Fusion原生组件)
|
bindoon commented 15 days ago •
edited
你的组件不支持 ref,需要用 React.forwordRef 包裹下
|
cwtuan commented 15 days ago
那最好在文档描述一下这个问题和解法。 但我觉得这样对使用上很不方便,你们再看看,能否改变实现,不要靠ref |