javascript - React onSubmit 等待函数内部的异步 IIFE 使用钩子更新状态
问题描述
有没有办法等待这个状态(customerId => setCustomerId)更新?
当用户注册时,他/她被重定向并且表单被卸载。
我尝试使用 IIFE,所以它在提交后立即运行,但没有运气,useEffect 也不会工作,因为我无法将 onSubmit 函数包装在 useEffect 范围内,至少我认为它不会工作。
有人可以告诉我这一点吗,在注册时更新 firebase 中的用户文档(这就是 UserDataProvider() 所做的)以防止将来出现并发症至关重要。
const onSubmit = (formData: FormData) => {
document.body.style.cursor = 'wait';
(async function () {
const customer = await axios.post('/api/create_customer', {
email: 'testemail@test.com',
name: `Dario Kolic`,
});
setCustomerId(customer.data);
})();
console.log(customerId);
return auth
.createUserWithEmailAndPassword(formData.email, formData.password)
.then(() => {
return new UserDataProvider().set({
customerId: customerId,
});
})
.then(() => {
document.body.style.cursor = 'default';
// window.location.href = '/terms_of_service';
});
};
解决方案
问题
第一个 IIFE 只有异步调用,为什么第二个返回立即执行而不等待客户 ID 更新。这意味着在 customerid 更新之前执行的第二个函数
最好使用默认then callback
函数而不是等待。为什么在onsubmit
事件中使用 return 语句。我认为这应该没有效果。
const onSubmit = (formData: FormData) => {
document.body.style.cursor = 'wait';
axios.post('/api/create_customer', {
email: 'testemail@test.com',
name: `Dario Kolic`,
}).then((customer) => {
setCustomerId(customer.data);
auth
.createUserWithEmailAndPassword(formData.email, formData.password)
.then(() => {
return new UserDataProvider().set({
customerId: customer.data,
});
})
.then(() => {
document.body.style.cursor = 'default';
// window.location.href = '/terms_of_service';
});
})
};
推荐阅读
- algorithm - 比较算法的复杂性
- arrays - 我应该在将对象发送到服务器之前清理它们吗
- java - Apache Spark Java - Pi 估计示例编译问题
- android - NUnit 测试项目 - 无法创建 Xamarin MockContext - 找不到 java-interop
- python - python:递归函数不返回真或假
- javascript - C3散点图显示所有tcks
- reactjs - 在 Typescript 中,如何确保 React 子组件属于某种类型
- python - 如何解决numpy矩阵乘法错误
- unzip - 如何删除解压缩后出现在 PHP/CSS/JS 文件中的不需要的“额外换行符”?
- postgresql - 将间隔日添加到来自 postgresql 的日期