亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我收到 this.setState is not a function inside

我收到 this.setState is not a function inside

largeQ 2023-09-21 14:12:33
我看過一些關于“this.setState 不是函數”問題的主題,但沒有一個主題為我解決了這個問題。我使用了箭頭函數或綁定“this”,但仍然收到錯誤。初步嘗試如下。它使用嵌套的 setTimeout 函數(我可以解釋為什么它會有所幫助),但問題是圍繞 this.setState 的。在不研究“useEffect”Hook 的情況下,我可以檢查下面的代碼中是否缺少在 React 中設置狀態的基本/基礎內容嗎?let delay = 5000;      var startTime = new Date().getTime();      let intervalTimerId = setTimeout(function request() {        // first apply a random number to a div        let randomNum = Math.floor(Math.random() * 6) + 1;        // document.querySelectorAll(".someClass"+randomNum)[0].setAttribute("id", "test");        // then after a second, remove the class        setTimeout(() => {          // document.querySelectorAll(".someClass"+randomNum)[0].setAttribute("id", "");          // after another second, set state to use later          setTimeout(() => {            this.setState({someState: "testing"});          }, 1000)        }, 1000)        // set new delay time        if (new Date().getTime() - startTime > 9000) {          delay = 3000;        }        console.log(new Date().getTime() - startTime)        intervalTimerId = setTimeout(request, delay);      }, delay);
查看完整描述

3 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

您可以嘗試使用箭頭功能


let delay = 5000;

var startTime = new Date().getTime();


const request = () => {

  // first apply a random number to a div

  let randomNum = Math.floor(Math.random() * 6) + 1;

  // document.querySelectorAll(".someClass"+randomNum)[0].setAttribute("id", "test");


  // then after a second, remove the class

  setTimeout(() => {

    // document.querySelectorAll(".someClass"+randomNum)[0].setAttribute("id", "");


    // after another second, set state to use later

    setTimeout(() => {

      this.setState({ someState: 'testing' });

    }, 1000);

  }, 1000);


  // set new delay time

  if (new Date().getTime() - startTime > 9000) {

    delay = 3000;

  }


  console.log(new Date().getTime() - startTime);


  intervalTimerId = setTimeout(request, delay);

};


let intervalTimerId = setTimeout(request, delay);


查看完整回答
反對 回復 2023-09-21
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您可以使用箭頭函數顯式綁定 this.bind(this)或簡單地用箭頭函數替換函數語法,因為this箭頭函數內等于this聲明該函數的外部:


let intervalTimerId = setTimeout(() => {

    ...

    setTimeout(() => {

       this.setState({someState: "testing"});

    }, 1000)

}, delay);


查看完整回答
反對 回復 2023-09-21
?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

您可以嘗試使用綁定:

let?intervalTimerId?=?setTimeout(function?request()?{?...?}.bind(this)

假設您正在使用類組件并且this尚未損壞,不使用類組件的動機之一是:

除了使代碼重用和代碼組織變得更加困難之外,我們發現類可能成為學習 React 的一大障礙。您必須了解 JavaScript 中的工作方式,這與大多數語言中的工作方式非常不同。


查看完整回答
反對 回復 2023-09-21
  • 3 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號