代码之家  ›  专栏  ›  技术社区  ›  Arya

未定义此.setState在“then”区块内

  •  0
  • Arya  · 技术社区  · 3 年前

    this.setState 可在外部使用 .then

      autoWork(e) {
        this.setState({ showWaiting: true });
        actions.autoSubmit(exampleVarOne, exampleVarTwo).then(function (results) {
          dbAction.fetch().then(response => {
            if (response.status === 200) {
              const responseData = response.data;
              this.setState({ disabledButton: true })
              this.setState({ showWaiting: false });
            }
          }).catch(function (error) {
            console.log(error);
            this.setState({ showWaiting: false });
          });
        });
      }
    

    但是我得到以下错误

    未捕获(承诺中)TypeError:无法读取的属性“setState” 未定义

    对于这行代码 this.setState({ disabledButton: true })

    this then 阻止?如何更新 然后 阻止?

    2 回复  |  直到 3 年前
        1
  •  1
  •   Abhijeet Abnave    3 年前

    “直到它绑定。他们没有自己的这个绑定。相反,它在作用域中查找,就像普通变量一样。

    那么 .接住

     autoWork(e) {
        this.setState({ showWaiting: true });
        actions.autoSubmit(exampleVarOne, exampleVarTwo).then((results) => {
          dbAction.fetch().then((response) => {
            if (response.status === 200) {
              const responseData = response.data;
              this.setState({ disabledButton: true })
              this.setState({ showWaiting: false });
            }
          }).catch((error) => {
            console.log(error);
            this.setState({ showWaiting: false });
          });
        });
      }
    
        2
  •  2
  •   Christian Fritz    3 年前

    是的,那是因为 function this 上下文。您可以通过使用箭头函数来轻松避免这种情况:

    更改:

        actions.autoSubmit(exampleVarOne, exampleVarTwo).then(function (results) {
    

        actions.autoSubmit(exampleVarOne, exampleVarTwo).then((results) => {