你瞅啥呢

2020/09/17 this.formRef.current.setFieldsValue为null(注意是异步操作)

2020/09/17

近些天来我一直有个关于this.formRef.current.setFieldsValue为null的问题没有得到解决,直至我上网百度一下方知闭门造车是如此的苦逼。
造成他为null,在初始化了formRef=React.createRef()以及form表单内插入数据接收器ref={this.formRef}和能够获取到数据源并且排除不是写错单词的前提下,调用this.formRef.current.setFieldsValue来设置form表单的值没有问题的;
但是,需要注意的是,form表单没有被渲染的话,里面是没有值的,所以不管业务怎么写,关键还得加上form表单已经渲染的这个前提;
而我遇到的业务则是:点击按钮,加载对应的form表单数据,而没有点击时它是没有被渲染的,当你套上个定时器:setTimeout(() => { this.formRef.current.setFieldsValue({ 业务 }) }, 任意时间 ),就可以在点击的时候渲染form表单了。

2020/09/18

除了套定时器之外还可以写成异步加载,如在点击事件前加个async,设置值的地方再写个await,具体如下:
showModal = async (ev, record, d) => {
await setState({
modalVisible: true,
modifyModalData: record,
modalTitle: "编辑",
}); // setState接收数据,async和await是组合使用的。
this.formRef.current.setFieldsValue({ 业务 }, 100) // 这里设置form表单的值
}
但是,这方法有时候又不灵,具体原因我还没找到,而用定时器setTimeout(() => () {})就没问题。

2022-06-23

今天又碰着了这个问题,不过不是为null,二是undefined。

同样地,当我想用定时器去给form表单赋值时,还是报undefined。

最终,我查阅了一篇文章,里面详细写明了setFieldsValue的用法,文章传送门:https://blog.csdn.net/sky_blue6/article/details/108155215。

问题出现的原因和antd的版本有关,即:v4版本的antd才可以使用ref来控制form表单的setFieldsValue,而v3版本的都是使用this.props.form自带的setFieldsValue方法。

而我现在这个项目用的antd的版本是v3,却用了v4版本的方法,故而报错。

解决方案:

this.props.form.setFieldsValue({
    id: 666,
    name: '你个老六我真的是服了',
})

注:不用定时器。

posted @   叶乘风  阅读(1508)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示