3 回答

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);

TA貢獻1776條經驗 獲得超12個贊
您可以使用箭頭函數顯式綁定 this.bind(this)或簡單地用箭頭函數替換函數語法,因為this箭頭函數內等于this聲明該函數的外部:
let intervalTimerId = setTimeout(() => {
...
setTimeout(() => {
this.setState({someState: "testing"});
}, 1000)
}, delay);

TA貢獻1783條經驗 獲得超4個贊
您可以嘗試使用綁定:
let?intervalTimerId?=?setTimeout(function?request()?{?...?}.bind(this)
假設您正在使用類組件并且this
尚未損壞,不使用類組件的動機之一是:
除了使代碼重用和代碼組織變得更加困難之外,我們發現類可能成為學習 React 的一大障礙。您必須了解 JavaScript 中的工作方式,這與大多數語言中的工作方式非常不同。
添加回答
舉報