javascript - 如何修复 : Meteor Method fired twice with onClick or onKeyPress with React

标签 javascript reactjs meteor onclick keypress

始终选中:

你好,

我发现在我的数据库中 Meteor Method 已通过点击或按键执行了多次。

我没能触发错误。

这里是我的代码:

class Answering extends Component {
...

validAnswer() {
  ...

  validAnswer.call({
    ...
  });
}
...
render() {
    return (
...
<div
  id="Answering-button-next"
  role="button"
  onClick={() => { this.validAnswer(); }}
  onKeyPress={(e) => { if (e.key === 'Enter') this.validAnswer(); }}
  tabIndex="0"
>OK
</div>

如何修复这个错误?

谢谢

最佳答案

您应该能够将类属性用作本地类变量。使用它来检查当前请求是否正在处理。如果正在处理,则提前返回,以便不调用该方法。如果未处理,则将其切换为正在处理,并在服务器请求完成后在方法回调中将其设置回未处理。这将防止在回调运行之前发生重复(表明服务器方法响应成功)。

class Answering extends Component {
    isProcessing: false,

    validAnswer() {
        if (this.isProcessing) return;
        this.isProcessing = true;
        validAnswer.call({}, () => {
            this.isProcessing = false;
        });
    }

    render() {
        return (
            <div
                id="Answering-button-next"
                role="button"
                onClick={() => { this.validAnswer(); }}
                onKeyPress={(e) => {
                    if (e.key === 'Enter') this.validAnswer();
                }}
                tabIndex="0"
            >
                OK
            </div>
        );
    }
}

关于javascript - 如何修复 : Meteor Method fired twice with onClick or onKeyPress with React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50435612/

相关文章:

javascript - 使用正则表达式和 Yup 来验证仅包含扩展拉丁字母和至少 2 个单词的全名

javascript - meteor CSV 导出

javascript - Javascript中如何将字符串转换为数组并删除引号?

javascript - 显示有关更改事件的信息的问题

Javascript:由navicon继承的togglebar的不透明度

javascript - 多次填写同一表单字段的内容并将其写入数据库的多行中

javascript - 在 Javascript 中使用按钮退出 for 循环

javascript - 将图像添加到 react 状态以在自定义下拉列表中显示

javascript - 我将如何/在 Node 中使用什么来抓取 <video> src?

javascript - 仅更新 MongoDB 中的某些子文档