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: '你个老六我真的是服了', })
注:不用定时器。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧