javascript - ref 返回空值reactjs.如何处理?

标签 javascript reactjs

我正在使用reactjs中的ref从另一个组件打开模态。为此,我正在执行以下代码。

otpModalRef = ({onOpenModal}) => {
       this.showModal = onOpenModal;
}

并在下面的渲染代码中

<div className="otp_modal">
    <Otp ref={this.otpModalRef} ></Otp>
</div>

& 然后通过 this.showModal(); 调用寄存器函数,工作正常。但是当我单击登录按钮时,它给出了 TypeError: Cannot read property 'onOpenModal' of null。下面是登录和注册功能。

    login = (e) => {
    e.preventDefault();
     axios.post('/api/signin', { 
                    user:this.state.user,
                    password:this.state.login_pass,
                })
      .then(res => {
            console.log(res);
            this.context.router.history.push({
                    pathname:'/',
                });

      })
      .catch(function (error) {
        console.log(error.message);
      })
}

register = (e) => {
    e.preventDefault();     
    axios.post('/api/user/add', { 
                    firstname: this.state.fname,
                    lastname:this.state.lname,
                    email:this.state.emailaddress,
                    password:this.state.password,
                    mobile:this.state.mobile 
                },              
            )
      .then(res => {
            console.log(res);
            this.showModal();
      })
}

不明白问题出在哪里?如果我评论 otpModalRef ,它会重定向到主页,但如果我保留它,则会出现此空错误。

最佳答案

您需要调用 React.createRef() 来创建句柄,而不是像在常规代码中那样。

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.otpModalRef = React.createRef();
  }
  render() {
    ...
  }
}

关于javascript - ref 返回空值reactjs.如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55161867/

相关文章:

javascript - 从 Puppeteer 中的单个选择器获取多个属性

javascript - 使用 jquery 选择器渲染 reactjs

javascript - 防止 ReactJS 中的多个按钮颜色激活

导航时 Javascript 内存泄漏

javascript - 如何防止网页刷新时倒计时器重置?

javascript - 使用 Jest 模拟不需要的 React 组件

javascript - React.js - 关闭并在 X 项后添加另一个行 div

javascript - 使用 mocha 和嵌套回调测试 Node 服务器

javascript - 如何在导航/重新加载到其他页面时停止 jquery 函数?

reactjs - 永远显示 "lighthouse is warming up"