【发布时间】:2018-03-27 00:51:18
【问题描述】:
我有以下问题:我有一个反应类(dashboardContainer),只有在用户登录时才可见。这个类(dashboardContainer)由其他类(授权)扩展,授权类检查用户是否登录并获取如果数据未处于状态,则返回用户数据。这两个类都使用 react-redux connect 但是当我执行它时会引发下一个错误:
未捕获的类型错误:无法读取未定义的属性“存储” 在 DashboardContainer.Connect (connectAdvanced.js:122) 在新的 DashboardContainer (DashboardContainer.jsx:57) 在 eval (ReactCompositeComponent.js:294) 在 measureLifeCyclePerf (ReactCompositeComponent.js:75) 在 ReactCompositeComponentWrapper._constructComponentWithoutOwner (ReactCompositeComponent.js:293) 在 ReactCompositeComponentWrapper._constructComponent (ReactCompositeComponent.js:279) 在 ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:187) 在 Object.mountComponent (ReactReconciler.js:45) 在 ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:370) 在 ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:257)
这是代码
import React,{Component} from 'react'
import PropTypes from 'prop-types'
import lodash from 'lodash'
import auth from '../../../utils/localStorage'
import {browserHistory} from 'react-router'
import {connect} from 'react-redux'
import {bindActionCreators} from 'redux'
import * as userActions from '../../../actions/userActions'
import * as appActions from '../../../actions/appActions'
class AuthorizedComponent extends Component {
constructor(props){
super(props)
}
async componentDidMount(){
const { routes } = this.props; // array of routes
const { router } = this.props;
console.log(this.props.userActions)
//check if user is logged (token in localstorage)
if (!auth.loggedIn() ) browserHistory.push('/login')
if(this.props.user == null ){
//get user
const response = await this.props.userActions.getUserByToken()
//get all roles available for this route
const user = await response
console.log('authorized')
console.log(user)
console.log('----------')
}
}
}
function mapStateToProps(state){
return{
user: state.user
}
}
function mapDispatchToProps(dispatch){
return {
userActions: bindActionCreators(userActions, dispatch),
appActions: bindActionCreators(appActions, dispatch)
}
}
export default connect( mapStateToProps , mapDispatchToProps )(AuthorizedComponent)
//export default AuthorizedComponent
这是 DashboardContainer 类:
import React from 'react'
import PropTypes from 'prop-types'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
import Dashboard from './Dashboard'
import HeaderContainer from '../Header/HeaderContainer'
import Authorized from '../Authorized/Authorized'
import * as userActions from '../../../actions/userActions'
import * as appActions from '../../../actions/appActions'
class DashboardContainer extends Authorized {
constructor(props) {
super(props)
}
render() {
return (<div className="">
<HeaderContainer />
<Dashboard
itemActive={'dashboard'}/>
</div>)
}
}
function mapStateToProps(state) {
return {
app: state.app,
sidebar: state.sidebar
}
}
function mapDispatchToProps(dispatch) {
return {
userActions: bindActionCreators(userActions, dispatch),
appActions: bindActionCreators(appActions, dispatch)
}
}
export default connect(mapStateToProps, mapDispatchToProps)(DashboardContainer)
我最近是 Redux 的新人并做出了反应,我不知道我是否做得正确,或者是否有其他方法可以做得很好。
【问题讨论】:
标签: javascript reactjs redux