2017-10-28 118 views
0

我試圖讓我的第一個真正的反應和REDX應用程序的身份驗證和運行,但我堅持管理路線訪問和驗證。對象的屬性是未定義的對象:React.PropTypes.object

這裏是我的代碼來驗證授權:

export default function(ComposedComponent) { 
    class Authentication extends Component { 
    static contextTypes = { 
     router: React.PropTypes.object 
    } 

    componentWillMount() { 
     if (!this.props.authenticated) { 
     this.context.router.push('/'); 
     } 
    } 

    componentWillUpdate(nextProps) { 
     if (!nextProps.authenticated) { 
     this.context.router.push('/'); 
     } 
    } 

    render() { 
     return <ComposedComponent {...this.props} /> 
    } 
    } 

    function mapStateToProps(state) { 
    return { authenticated: state.auth.authenticated }; 
    } 

    return connect(mapStateToProps)(Authentication); 
} 

我進口,並要求它在我的路線上的位置:

class App extends Component { 
    render() { 
    return (
     <Router history={history}> 
      <Layout> 
      <Route path='/' exact component={Home} /> 
      <Route path='/signin' component={SignIn} /> 
      <Route path='/signout' component={SignOut} /> 
      <Route path='/brain' component={RequireAuth(Brain)} /> 
      </Layout> 
     </Router> 
    ); 
    } 
} 

export default App; 

這是我收到的錯誤:

TypeError: Cannot read property 'object' of undefined 
./src/components/auth/RequireAuth.js.__webpack_exports__.a 
src/components/auth/RequireAuth.js:7 
    4 | export default function(ComposedComponent) { 
    5 | class Authentication extends Component { 
    6 |  static contextTypes = { 
> 7 |  router: React.PropTypes.object 
    8 |  } 
    9 | 
    10 |  componentWillMount() { 
View compiled 

感謝您提供的任何方向!

+0

您運行的是哪個版本的React? 'React.PropTypes'從v15.5開始已被棄用。它現在是它自己的'PropTypes'模塊(https://www.npmjs.com/package/prop-types)。你可能應該導入它,然後使用'PropTypes.object'。 – SamVK

+0

這固定它,非常感謝你。是的,我使用最新版本的React,並使用了一個有點過時的教程,所以我認爲這是一個問題,但在搜索時找不到任何東西。再次感謝! –

回答

0

你可以試試嗎?希望它有幫助

static contextTypes = { 
    router: React.PropTypes.func 
} 
+0

試過了,但沒有這樣的運氣!謝謝你嘗試,但我很感激。 –

相關問題