【问题标题】:React Const Infinite CycleReact 常量无限循环
【发布时间】:2020-11-12 01:55:41
【问题描述】:

我在使用 React 编码时遇到了一个问题。我有以下代码段:

<Popconfirm
  placement="topRight"
  title="Are you sure to delete this task?"
  onConfirm={confirm} okText="Yes" cancelText="No"  // [1]
>
  <a>delete</a>
</Popconfirm>

我有这样的确认功能:

const confirm = () => {                             // [2]
  message
    .loading("Deleting...", 1.8)
    .then(() => message.success("Todo item deleted!", 1.3));
  postDeleteData('/todo/', { method: 'delete', keyid: 42})   // [3] 
    .then(data => {
      if (data.success) {window.location = '/todo/';}
    })
  console.log('confirmed');
};

现在,到目前为止一切正常。但是,在我进行以下更改后,事情将无法正常工作:

  1. confirm 更改为confirm(42)(仅作为测试)
  2. confirm = () =&gt; 更改为confirm = (kid) =&gt;
  3. {keyid: 42} 更改为{keyid: kid}

这基本上将参数传递给确认调用。发生这种情况时,我希望一切都能顺利进行:

如您所见,代码开始自动无限执行,无需任何按键或操作,这就是问题所在。谁能告诉我原因?提前致谢。

资源

async function postDeleteData(url = '', data = {}) {

  const formData = new FormData();
  formData.append('method', data.method);
  formData.append('keyid', data.keyid);

  const response = await fetch(url, {
    method: 'POST',
    credentials: 'include',
    mode: 'same-origin',
    headers: {'X-CSRFToken': csrftoken,},
    body: formData
  });
  return response.json();
}
# Django views
class IndexView(View):
    template_name = "todo/index.html"

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name)

    def post(self, request, *args, **kwargs):
        if 'delete' in request.POST.get("method"):
            Todo.objects.filter(id=request.POST.get("keyid")).delete()
            return JsonResponse({'success': True})
        else:
            return JsonResponse({'success': False})

【问题讨论】:

    标签: javascript django reactjs post antd


    【解决方案1】:
    1. 将确认更改为确认(42)(仅作为测试)

    当你改变这部分的时候,你实际上改变了对函数的引用到函数的结果。这意味着每次重新渲染时都会调用它。您需要再次使其成为函数引用,我建议将confirm(42) 更改为() =&gt; confirm(42)

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 2020-04-14
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 2019-09-13
      • 2021-10-05
      相关资源
      最近更新 更多