Brick Next表单组件动态更新数据后验证不触发怎么办?
在用Brick Next的Form组件时,我通过setValues动态更新了表单数据,但手动调用validate方法始终没反应。之前按文档写过静态校验没问题,动态更新就失效了。
import { Form, useForm } from '@bricks';
const MyForm = () => {
const form = useForm();
useEffect(() => {
form.setValues({ name: 'test' }); // 动态赋值成功
form.validate('name'); // 这里没有触发验证
}, []);
return (
<Form form={form}>
<Input name="name" required />
</Form>
);
};
控制台没报错但验证结果始终拿不到,是不是需要重新渲染或者有什么特殊的更新方式?
解决办法是用
form.setValues更新完数据后,再调用form.validateFields方法而不是单独的validate。另外,确保你的setValues是异步处理的,这样能保证状态更新完成后再触发验证。给你改一下代码:
关键点就是
setValues返回的是一个Promise,等它resolve后再调验证方法,这样就能确保值更新到组件里了。直接调validate的话,组件可能还没反应过来值变了,自然不会触发校验。如果还是不行,检查一下你的Form和Input组件是不是被不必要的父级重新渲染干扰了,这种问题偶尔也会导致类似情况。老开发者都知道,状态管理这块儿,坑多了去了,多调试几次就习惯了。