javascript - React 在移动 recaptch 就绪回调时抛出 CORs 错误
问题描述
我有一个使用 create-react-app 创建的 React 应用程序。我将 reCaptcha 放在上面并放在下面,一切都很好。令牌回来了,我可以嵌套一个获取并继续我的生活。
componentDidMount(){
if(!this.state.isRecaptchaReady){
window.grecaptcha.ready(function(){
window.grecaptcha.execute('id', {action: 'homepage'})
.then(//...)
});
}
}
除了我不能,因为我知道必须有更好的方法。我想获取令牌并存储它,然后从中调用一个函数,而不是嵌套得太深,我this
无法挽救我的生命(我的意思是我可以但不想用一堆绑定)。
requestRecaptchToken = () => {
console.log(window.grecaptcha);
//const tokenPromise = window.grecaptcha.execute('id', {action: 'homepage'});
}
handleRecaptchToken = data => {
const { modal } = this.state;
modal.recaptcha = JSON.parse(data);
this.setState({modal});
}
componentDidMount(){
if(!this.state.isRecaptchaReady){
window.grecaptcha.ready(this.handleRecaptchReady());
}
}
componentDidUpdate(){
if(this.state.isRecaptchaReady){
this.requestRecaptchToken();
}
}
这条线
const tokenPromise = window.grecaptcha.execute('id', {action: 'homepage'});
在外面
window.grecaptcha.ready()
炸毁
错误:引发了跨域错误。React 无法访问开发中的实际错误对象。有关更多信息,请参阅https://reactjs.org/docs/cross-origin-errors.html。
问题是它没有意义,我读了一些 WebPack eval 的东西,但这似乎有点超出我的学习曲线。
解决方案
React 抛出的信息主要是因为我没有发现错误并且它不知道去哪里寻找。我仍然不知道为什么调用execute
外部ready
行为错误,但我认为调用方法、渲染和反应可以访问的内容之间存在竞争条件。这是严格的猜测,我还不知道如何证明它。
然而,在退后一步思考我的目标后,我确实解决了这个问题。我没有将其分解为多个方法(我的 java 大脑妨碍了),而是简单地使用箭头函数将this
范围绑定到组件。
try {
window.grecaptcha.ready(() => {
window.grecaptcha.execute(process.env.REACT_APP_RECAPTCHA_ID).then(data => {
this.handleRecaptchToken(data);
});
});
} catch(e) {
console.log("reCaptcha token load error: " + e);
}
setState
可以将可选的回调方法作为第二个参数的事实允许handleRecaptchToken
在令牌数据完成后获取数据。
handleRecaptchToken = data => {
this.setState({"recaptchaToken" : data}, this.fetchRecaptchaData);
}
fetchRecaptchaData
然后对我的服务器进行 api 调用以获取谷歌数据并再次更新状态。
推荐阅读
- c# - 是否可以通过 WS_CHILD 样式以无法聚焦的形式聚焦控件?
- java - 日志在 Elastic Beanstalk Tomcat 环境中不起作用
- node.js - 部署到谷歌应用引擎中的服务后无法得到任何响应
- serenity-platform - 宁静网格不翻译查找编辑器
- latex - 一个 LaTex 文件生成两个 PDF 文件
- javascript - PouchDB 无法将 blob 转换为图像 src 的 url
- sql - 查找匹配列 - SQL 或 Excel 公式无宏,在哪里找到匹配
- html - CSS BUG:箭头进度条高度不匹配
- java - AAPT:错误:“6495ed”与属性背景 (attr) 参考不兼容|颜色
- php - php artisan 迁移错误 - 找不到驱动程序