此代码在第一次和第三次尝试时均能正常工作,总有一个步骤会导致错误并且不向db发送任何数据,每次都破坏了我的业务逻辑,无论是否尝试重新加载页面,我都将得到相同的结果
apiCall = e => {
e.preventDefault();
window.scrollTo(0, 0);
this.setState({ loading: true });
const { currentUser } = fire.auth();
let userEmail = currentUser.email;
let userUnderscore = userEmail.replace(/\./g, '_');
let intervalMS = this.state.interval * 60000;
let url = `https://url.com/api/v1/${userUnderscore}/${this.state.urlTask}?url=${this.state.urlTask}&width=${this.state.width}&interval=${intervalMS}&user=${userUnderscore}&running=true`;
if (this.state.interval >= 1 && this.state.urlTask !== "") {
fetch(url)
}
else {
this.setState({ addURLError: true, loading: false });
}
this.setState({ addURL: true, addURLError: false });
fire.database().ref(`/master/users/${userUnderscore}/setup/`)
.update({
running: true,
interval: this.state.interval,
url: this.state.urlTask,
});
setTimeout(
function () {
this.setState({ addURL: false, running: true });
window.location.reload();
}.bind(this), 2000
);
}
...
<Button color='black' onClick={this.apiCall} animated='vertical' type='submit'>
编辑
该函数和数据库实际上已更新,问题在于,即使表单保留值,第二次尝试状态也为空
答案 0 :(得分:0)
我通过在尝试执行该功能之前重新加载应用程序来解决此问题,这样始终可以使用一种新状态:window.location.reload();