【发布时间】:2021-01-09 10:09:00
【问题描述】:
我将 React 与功能组件一起使用。当我登录时,我使用history.push('/dashboard') 将用户重定向到仪表板页面。当我在仪表板页面上进行控制台日志时,它会显示props 中的所有可用数据。但是数据不会在页面上呈现,它显示"Uncaught (in promise) TypeError: Cannot read property 'profile' of undefined"。当我刷新页面或在历史记录中使用 { forceRefresh:true } 时,一切正常。
侧边栏组件:
import React,{useEffect} from 'react';
import { Link,withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
import { userActions } from '../../../_actions/users'
import {
Sidebar,
UncontrolledButtonDropdown,
Avatar,
AvatarAddOn,
DropdownToggle,
DropdownMenu,
DropdownItem
} from './../../../components';
function SidebarTopA(props) {
const { authentication } = props
function logout(){
return (e)=>props.logout()
}
return (
<React.Fragment>
{ /* START: Sidebar Default */}
<Sidebar.HideSlim>
<Sidebar.Section className="pt-0">
<Link to="/" className="d-block">
<Sidebar.HideSlim>
<Avatar.Image
size="lg"
src={authentication.user.user.profile.profile_photo}
addOns={[
<AvatarAddOn.Icon
className="fa fa-circle"
color={authentication.loggedIn ? "success" :"warning"}
key="avatar-icon-fg"
/>
]}
/>
</Sidebar.HideSlim>
</Link>
<UncontrolledButtonDropdown>
<DropdownToggle color="link" className="pl-0 pb-0 btn-profile sidebar__link">
{authentication.user.user.first_name} {authentication.user.user.last_name}
<i className="fa fa-angle-down ml-2"></i>
</DropdownToggle>
<DropdownMenu persist>
<DropdownItem header>
{authentication.user.user.email}
</DropdownItem>
<DropdownItem divider />
<DropdownItem tag={Link} to="/apps/profile-details">
<i className="fa fa-fw fa-user mr-2"></i>
Your Profile
</DropdownItem>
<DropdownItem divider />
<DropdownItem tag={Link} to="/" onClick={logout()}>
<i className="fa fa-fw fa-sign-out mr-2"></i>
Sign Out
</DropdownItem>
</DropdownMenu>
</UncontrolledButtonDropdown>
<div className="small sidebar__link--muted">
{authentication.user.user.profile.job_title}
</div>
</Sidebar.Section>
</Sidebar.HideSlim>
{ /* END: Sidebar Default */}
{ /* START: Sidebar Slim */}
<Sidebar.ShowSlim>
<Sidebar.Section>
<Avatar.Image
size="sm"
src={authentication.user.user.profile.profile_photo}
addOns={[
<AvatarAddOn.Icon
className="fa fa-circle"
color="white"
key="avatar-icon-bg"
/>,
<AvatarAddOn.Icon
className="fa fa-circle"
color="success"
key="avatar-icon-fg"
/>
]}
/>
</Sidebar.Section>
</Sidebar.ShowSlim>
{ /* END: Sidebar Slim */}
</React.Fragment>
);
}
function mapState(state) {
const { authentication } = state
return { authentication };
}
const actionCreators = {
logout: userActions.logout
}
const connectedHomePage = withRouter(connect(mapState, actionCreators)(SidebarTopA));
export { connectedHomePage as SidebarTopA };
【问题讨论】:
-
你能做代码沙箱吗?
标签: reactjs react-redux react-router-dom