Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解决';无法设置属性';myInterval';未定义的';错误?_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 如何解决';无法设置属性';myInterval';未定义的';错误?

Javascript 如何解决';无法设置属性';myInterval';未定义的';错误?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,因此,错误表示无法设置未定义的属性“myInterval”,我不知道为什么。此外,如果需要,我可以向您发送完整版本的代码 const timerStart = () => { this.myInterval = setInterval(() => { setIsOn(true); if (secs > 0) { 将this.myInterval更改为const myInterval 要访问函数外部的myIn

因此,错误表示无法设置未定义的属性“myInterval”,我不知道为什么。此外,如果需要,我可以向您发送完整版本的代码

const timerStart = () => {
          this.myInterval = setInterval(() => {
          setIsOn(true);
    
          if (secs > 0) {

this.myInterval
更改为
const myInterval

要访问函数外部的
myInterval
变量,可以在组件顶部的
构造函数中声明它,如下所示

class MyComponent extends Component{

    constructor(props) {
        super(props);
        this.myInterval = null;
    }
    

    setInterval = () => {
        this.myInterval = setInterval(() => {
            console.log("Running interval");
        }, 1000);
    };

    cancelInterval = () => clearInterval(this.myInterval);

    render() {
        return "..."
    }

}

不要忘记,如果您想使用在类组件中定义的函数,您需要将其绑定到您的组件

如果您很容易使用功能组件,只需使用const并定义您的功能即可

// Class Component 
hello(){

}
constructor(props){
super(props)
this.hello = this.hello.bind(this)
}

//Function Component 

const hello =() =>{
}
您不必对
timerStart
变量调用函数。它会自动为您启动计时器


当然,如果这是您想要做的:-)

您正在尝试在箭头函数中使用这个关键字

解决方案:删除this关键字,并使其const

const timerStart = () => {
   const myInterval = setInterval(() => {
       ... your code ...
   }
}

问题是,根据您的评论:现在我不能在其他任何地方使用myInterval,只能在timerStart函数中使用。有没有办法解决这个问题?

解决方案:您可以为setInterval单独设置一个函数,然后可以在任何地方调用它

const myInterval = setInterval(() => {
   ... your code ...
   if (somecodition) {
      clearInterval(myInterval);
   }
},1000)
现在,使用此myInterval任意位置,间隔为1000 ms,函数将运行(请参见clearInterval,其中包含您想要的任何条件)


只要您想运行,就调用该函数:
myInterval()

这意味着
this
未定义的
,这是因为您正在使用,它不会更改
this
绑定。您应该尝试传递一个匿名函数,以便
具有自己的调用上下文。现在我不能在其他任何地方使用myInterval,只能在timerStart函数中使用。有没有办法解决这个问题?我用一个更合适的解决方案再次更新了我的答案。
const myInterval = setInterval(() => {
   ... your code ...
   if (somecodition) {
      clearInterval(myInterval);
   }
},1000)