Javascript 获取React中useEffect之外的变量的当前值

Javascript 获取React中useEffect之外的变量的当前值,javascript,reactjs,components,Javascript,Reactjs,Components,我从django服务器得到一个响应,然后我需要将时钟变量设置为true,因为我在组件中使用该变量 let clock = false; useEffect(() => { switch (true) { ........ case dataParsed.type === "ClockInfo": { clock = true; }

我从django服务器得到一个响应,然后我需要将时钟变量设置为true,因为我在组件中使用该变量

let clock = false;
useEffect(() => {
      switch (true) {
        
      ........

        case dataParsed.type === "ClockInfo":
          {
            clock = true;
          }
          break;
      }
    };
  }, []);
const [clock, setClock] = useState(false);
// ...
  case dataParsed.type === "ClockInfo": {
    setClock(true);
    break;
  }

时钟值没有正确更改,它总是显示为false。我知道这是因为每次react渲染组件时,它都会返回假值,所以如何才能正确执行


我尝试使用useRef,但根本没有帮助。在我的组件中,我有一个条件,当clock==true时开始工作。

因为您试图在渲染输出中使用该值,所以必须使用state。设置状态是告诉react重新启动组件的唯一方法

let clock = false;
useEffect(() => {
      switch (true) {
        
      ........

        case dataParsed.type === "ClockInfo":
          {
            clock = true;
          }
          break;
      }
    };
  }, []);
const [clock, setClock] = useState(false);
// ...
  case dataParsed.type === "ClockInfo": {
    setClock(true);
    break;
  }
ref可以让您在一个渲染到下一个渲染之间具有持久值,但它无法启动渲染,因此它不是适合您的情况的工具。

如果可行,请尝试

import { useState } from 'react';
const [clock,setclock] = useState(false);
useEffect(() => {
      switch (true) {
        
      ........

        case dataParsed.type === "ClockInfo":
          {
            setclock(true);
          }
          break;
      }
    };
  }, []);

添加在useEffect依赖项数组中解析的数据。。甚至当dataParse的值发生更改时,也会调用它

import { useState } from 'react';
const [clock,setClock] = useState(false);
useEffect(() => {
      switch (true) {
      ........

        case dataParsed.type === "ClockInfo":
          {
            setClock(true);
          }
          break;
      }
    };
  }, [dataParsed]);


<Header word={catchword} socketRef={socketRef} clock={clock} />
从'react'导入{useState};
const[clock,setClock]=使用状态(false);
useffect(()=>{
开关(真){
........
案例dataParsed.type==“ClockInfo”:
{
设置时钟(真);
}
打破
}
};
},[dataParsed]);

我试过这个,它不起作用。在useEffect块之外,时钟仍然等于false。那么要么你的setClock(true)代码没有运行,要么你的log语句处于打印过时闭包值的位置。如果看不到更多的代码,就很难知道。我试过这个,它不起作用。在useEffect块之外,时钟仍然等于false。