我最近看到了此代码段,并且想知道状态变量在这里实际上是如何更新的。这是用于Firebase身份验证的身份验证状态观察器,用于确定用户是否已登录(docs reference)。通常,这是它的功能:
const [userData, setUserData] = useState(null)
firebase.auth().onAuthStateChanged(user => {
if (user) {
// User is signed in.
setUserData(user); // can now access properties of user
}
});
但是,此代码userData
通过setUserData
代替函数中的回调以完全相同的方式进行更新:
const [userData, setUserData] = useState(null)
firebase.auth().onAuthStateChanged(setUserData);
这两个函数都设置userData
为同一对象。在第二个片段中,如何通过不使用有形值来更新状态来更新状态,这是如何工作的?
第二个调用使用在其他地方定义为回调的函数,而第一个调用使用新定义的函数。
请参见下面的示例:
function log(data) {
console.log(data);
}
function someFunction(callback) {
setTimeout(()=>{ callback("my data")}, 1000);
}
someFunction( (data)=> console.log(data) ); // use new function
someFunction( log ); // reuse a defined function
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句