为什么我的redux的存储初始值是null初始值?

时间:2020-08-30 11:25:03

标签: reactjs redux react-redux typeerror

因此,在我登录我的应用程序后,令牌被保存在本地存储中,并且用户对象从存储的令牌中解码。因此,用户对象将是这样的:

{
    name: '',
    avatar: {},
    bio: '',
    and many others,
   ....,
}

我创建了一个负责身份验证工作的reducer和一个负责用户个人资料的reducer。所以根减速器看起来像这样:

export const RootReducer = combineReducers({
    auth: authReducer,
    profile: profileReducer,
});

在那之后,我在商店中添加了初始值,以便还原器状态得以持久。看起来像这样:

const loggedUserToken = localStorage.getItem('token'); 
const loggedUser = JSON.parse(localStorage.getItem('loggedUser'));
const store = createStore(
    RootReducer, 
    {
        auth: { 
            authenticated: loggedUserToken,
            loggedUser,
            isLoggedIn: false,
            errorMessage: '',
        },
        profile: {
            bio: loggedUser.bio,
            avatar: loggedUser.avatar,
        },
    }, 
    composeWithDevTools(applyMiddleware(...middlewares))
);

问题是,当我打开应用程序时出现此错误:

TypeError: Cannot read property 'bio' of null

然后,如果我从配置文件密钥中注释了bio和avatar行,则错误消失,并且再次显示带有注册和登录的主屏幕。然后,当我登录时出现此错误:

TypeError: Cannot read property 'type' of undefined
(anonymous function)
F:/dev/Friendist_Complete_/client/src/components/navbar/Navbar.jsx:47
  44 | <Link to='/profile'>
  45 |     <div className="App_avatar_medalion">
  46 |         <img 
> 47 |             src={`data:${avatar.type};base64, ${avatar.thumb}`} 
     | ^  48 |             alt={avatar.name} 
  49 |         />
  50 |     </div>

,然后在取消对bio和avatar这两行的注释后,错误消失了,此时一切正常,我可以按预期更新所有内容。甚至更奇怪的是,如果我退出但不刷新页面,然后重新登录,则可以使用,但是如果我退出并刷新页面并再次登录,则上面的所有错误都会重新出现。

据我所知,所有这一切都是因为redux存储中的配置文件对象最初并未填充,但应该填充,因为我直接从登录的用户属性中对其进行了保湿。

我想,我的问题是如何在登录时立即填充redux存储中的初始属性,以及如何使它们即使在刷新页面后也保持填充状态。

如果问题不太清楚,我深表歉意,这是因为我不太了解问题到底是什么。

0 个答案:

没有答案