javascript - 在没有任何新状态值的情况下,如何在函数中将“setState”作为回调调用成功更新状态?
问题描述
我最近看到了这个代码片段,我想知道状态变量是如何在这里更新的。这是在 firebase 身份验证中使用的身份验证状态观察器,以确定用户是否已登录(文档参考)。通常,它是这样运行的:
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
推荐阅读
- html - 如何使用按钮调用 jQuery
- latex - LaTeX - 在音乐环境中控制文本宽度
- asp.net - 出现 503 错误时自动重置 IIS
- python - 使用 Pandas 样式格式化 DataFrame 的索引/行
- docker - 来自 Windows 的 Docker 映像针对非 Windows Docker 主机
- regex - 将除条件中的值之外的所有值带入过滤器
- java - 如何在 Android Studio 中为我的两个 TextView 添加重置按钮
- xcode - 尝试在 kext 文件上运行 kextutil 返回权限错误
- python - 如何检查数据框列的行中的空值?
- go - 从 SID 获取组名