当前位置:   article > 正文

Antd之Modal+Form_antd modal form

antd modal form

react+antd的前端开发中少不了使用Modal+Form的形式来实现添加/编辑等功能!

本文主要记录在使用antd4.9.2开发过程中经常遇到的问题:this.formRef.current为空的情况!

首先需要验证一个机制就是当Modal默认visible=false的时候不会去渲染Modal下的组件

  1. class Test extends Component{
  2. constructor(props) {
  3. super(props);
  4. this.formRef = React.createRef()
  5. this.state = { show: false}
  6. console.log('Test.constructor')
  7. }
  8. render() {
  9. return (
  10. <Modal visible={this.state.show}>
  11. <Home/>
  12. <Form ref={this.formRef}>
  13. </Form>
  14. </Modal>)
  15. }
  16. }
  17. class Home extends Component{
  18. constructor(props) {
  19. super(props);
  20. console.log('Home.constructor ')
  21. }
  22. render() {
  23. return (
  24. <div>hello world!</div>)
  25. }
  26. }
  27. }

上述代码默认Modal是不显示的,第一次运行的时候console打印日志为

Test.constructor

当默认Modal为显示的时候,第一次运行的时候console打印日志为

  1. Test.constructor
  2. Home.constructor

所以很多时候需要在componentWillReceiveProps中对Form表单进行操作比如重置表单默认数据时,很可能会因为this.formRef.current还没有被初始化而导致的异常,代码如下

  1. componentWillReceiveProps(nextProps) {
  2. this.formRef.current.resetFields();
  3. }

解决方案如下代码,在setState()的回调函数中去操作,setState的回调函数表示已经执行了render完毕,所以这时this.formRef.current肯定是初始化过了的

  1. componentWillReceiveProps(nextProps) {
  2. this.setState({
  3. show: nextProps.show,
  4. value: nextProps.value
  5. },
  6. () => {
  7. if(this.formRef.current)
  8. {
  9. this.formRef.current.resetFields();
  10. }
  11. })
  12. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/91643
推荐阅读
相关标签
  

闽ICP备14008679号