2016-05-06 18 views
10

Ciao sto imparando Reagire js e ho incontrato un problem.When cerco di tornare alla pagina principale utilizzando reagire router io ottenere il seguente errore:ReactJs this.props.router indefinito

Uncaught TypeError: Cannot read property 'push' of undefined

Ecco il mio codice, come potete vedere sto chiamando la funzione Navigate:

enter image description here

miei Client.js con router:

enter image description here

Se sostituisco this.props.router.push('/'); con this.props.history.push('/');, funziona correttamente. Quale potrebbe essere il problema? Grazie per il tuo tempo.

+0

Potrebbe aggiungere il codice in cui si configura il router? È molto probabile che non si trasmetta correttamente i puntelli (forse i percorsi non sono inclusi nel tag ?) – garrettmaring

+0

ho appena aggiornato la domanda. – August

risposta

23

Manca un metodo di costruzione con una chiamata a super(). super() chiama il costruttore della classe genitore ed è necessario per passare correttamente le proprietà della classe genitori a questo componente. Sarà necessario per accedere a qualsiasi proprietà passata al componente, incluso router.

La parte superiore della classe di layout dovrebbe apparire come questa.

export default class Layout extends React.Component { 
    constructor(props) { 
    super(props) 
    } 

    navigate() { 
    ... 
    } 

    render() { 
    ... 
    } 
} 

Here are the docs on how classes work in ES6!

Edit 1: Reagire Router

È inoltre necessario utilizzare il nuovo withRouter quando si fa la navigazione tramite this.props.router. Puoi farlo passando il tuo componente come argomento ed esportandolo. La funzione withRouter avvolge semplicemente il componente in un altro componente che passa il puntello del router al componente. Devo sottolineare che esistono altri modi per eseguire il routing programmatico (singleton, contesto, ecc.), Ma quando si utilizza this.props.router.push è necessario utilizzare withRouter.

import { withRouter } from 'react-router' 
class Layout extends React.Component { 
    constructor(props) { 
    super(props) 
    } 

    navigate() { 
    ... 
    } 

    render() { 
    ... 
    } 
} 

export default withRouter(Layout) 

Using withRouter

+0

Ho aggiunto la funzione di costruzione ma sta ancora dicendo lo stesso errore – August

+0

Puoi aggiornare il tuo codice nella domanda – garrettmaring

+0

Sì ho appena cambiato la foto – August