使用Redux mapStateToProps时意外的键值对 Package 我的状态

m1m5dgzv  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(89)

我已经用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东西中。
有人能帮帮忙吗:)
我尝试卸载并重新安装reduxreact-redux。我试着重建我的应用程序。我尝试重新启动我的笔记本电脑。我试着简化我的reducer,去掉登录页面上对auth.currentUser?.getIdToken()的异步调用,只像user: user['_z']['_z']['_z']一样建立索引。

gmxoilav

gmxoilav1#

您可能需要通过调用.toJson将firebase对象转换为普通对象。

相关问题