我已经用Firebase和Redux开发了一个React Native应用程序几个星期了,在Redux的使用方面没有任何问题。然而,当我今天在做一些事情的时候,我开始看到这个奇怪的问题,似乎开始发生,没有任何原因,我可以辨别。
当我使用Firebase登录时,我调用Redux操作来在商店中设置我的用户对象,如下所示。
await signInWithEmailAndPassword(auth, email, pass)
.then(async (userCredential) => {
const user = userCredential.user;
const token = await auth.currentUser?.getIdToken();
props.setUser({
id: user['uid'],
email: user['email'],
token: token
});
props.navigation.navigate('Home');
})
字符串
下面是相应的动作和减速器。
export const setUser = (payload: User) => (
{
type: 'SET_USER',
payload: payload
}
);
const userReducer = async (state = INITIAL_USER_STATE, action: { type: string; payload: User; }) => {
switch (action.type) {
default:
return state;
case 'SET_USER':
alert('payload: ' + JSON.stringify(action.payload));
return action.payload;
}
};
的数据
您会注意到,我在reducer中放置了一个警报,以确保按照我的意图设置状态(事实也确实如此)。
user object
在我的一个组件中,我想访问这个用户对象。所以,我这样使用connect()
。
const mapStateToProps = (state: { user: User }) => {
const { user } = state;
return { user };
};
export default connect(mapStateToProps, null)(PlaidBackDrop);
型
在同一个文件中,我用alert(JSON.stringify(props.user));
警告用户对象。这就是我得到的(yikes!).
what的
所以我可以将这个随机的_z
添加到我的代码中,它再次工作。但我真的真的不想那么做。
const mapStateToProps = (state: { user: User }) => {
const { user } = state;
return { user: user['_z'] };
};
export default connect(mapStateToProps, null)(PlaidBackDrop);
型
更糟糕的是,有时我得到的状态是不同的。这里有两组随机的键和值,它们 Package 了我的对象,我在代码中没有做任何更改。
what the heckseriously now its nesting
所以,有时我得到对象,有时我得到动作,有时我得到对象, Package 在这些莫名其妙的_x
,_y
和_z
东西中。
有人能帮帮忙吗:)
我尝试卸载并重新安装redux
和react-redux
。我试着重建我的应用程序。我尝试重新启动我的笔记本电脑。我试着简化我的reducer,去掉登录页面上对auth.currentUser?.getIdToken()
的异步调用,只像user: user['_z']['_z']['_z']
一样建立索引。
1条答案
按热度按时间gmxoilav1#
您可能需要通过调用
.toJson
将firebase对象转换为普通对象。