【发布时间】:2022-01-10 19:22:13
【问题描述】:
我试图在 js React 中的 useEffect 调用中更改变量的值。 我注意到函数内部的值发生了变化,但全局值没有改变。
var O_name = "";
var A_name = "";
var A_platform = "";
var C_name = "";
function Statsview( {backButton} ) {
const urlParams = new URLSearchParams(window.location.search);
const name = urlParams.get('name');
var data = useRef();
const [overwatchName, setO_Name] = useState([]);
useEffect(() => {
console.log('mounted')
database.collection('USERS').where('name','==',name).get().then(snapshot => {
snapshot.forEach(doc => {
var data = doc.data()
O_name = data.overwatch;
console.log(O_name)
A_name = data.apexLegends;
console.log(A_name)
A_platform = data.apexLegendsPlatform;
console.log(A_platform)
C_name = data.chess;
console.log(C_name)
})
}).catch(error => console.log(error))
},[]);
console.log("oname: ",O_name)
console.log("aname: ",A_name)
console.log("aplat: ",A_platform)
console.log("cname: ",C_name)
...
...
}
useEffect 内部的控制台日志显示每个变量的更新值。 但是,useEffect 之外的控制台日志显示每个变量的值都是空白的。
如何更改这些全局值?
【问题讨论】:
-
a) 不要使用全局变量 b) 全局变量做改变。您的
console.log只是发生在 他们改变之前 -useEffect和.then()都是异步的 -
为什么不直接使用
setO_Name(data.overwatch);而不是O_name = data.overwatch;? -
你不能,在
useEffect中定义全局变量,
标签: javascript reactjs use-effect