我在firebase auth onauthstatechange回调中使用redux状态,像这样
...
const authUser = useSelector(state => state.authUser)
console.log(authUser.status)
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, () => {
console.log(authUser.status)
if (authUser.status === 'loading') {
dispatch(updateStatus('loaded'))
}
return () => unsubscribe()
}, []);
...
首先记录
加载
加载
然后在我签名后,认证状态改变了,它记录了
加载
加载
status的初始状态为loading
。每次auth状态改变时,它都会调用回调函数。回调函数中的status值始终是loading
,即使它在store中的值已经更改为loaded
。为什么它在回调中的值没有改变?
看完Dan的解释后,我知道state和props在闭包中永远不会改变。要实现我想要的逻辑,只需重写createSlice
中的更新逻辑...
updateStatus: (state, action) => {
if (state.auth.status === 'loading') {
state.auth.status = 'loaded'
}
}
...