2017-06-13 2 views
0

Ich möchte auf meine Home-Route umleiten, nachdem ich meine Axios-Anfrage an die API gesendet und eine gültige Antwort gesammelt habe. Wie man sehen kann, versuche ich den Kontext zu verwenden, aber in diesem Fall erhalte ich den Fehler "Kontext ist undefiniert". Wie kann ich in diesem Fall zu meiner Heimstrecke navigieren? Ich habe versucht mit history.push, aber das scheint auch nicht zu funktionieren. Irgendwelche Ideen würden sehr geschätzt werden?Navigieren mit Reagieren Router

import React, {Component} from 'react' 
import axios from 'axios' 
import Home from './Home' 
import { 
    BrowserRouter, 
    Link, 
    Route 
} from 'react-router-dom' 

class SignUp extends Component { 

    constructor(props){ 
    super(props); 
    this.state = { 
     email: '', 
     password: '' 
    }; 
    } 

    handleChange = (e) => { 
    this.setState({ 
     [e.target.name]: e.target.value 
    }) 
    } 

    handleClick =() => { 
    axios 
     .post('http://localhost:9000/signup',{ 
     email: this.state.email, 
     password: this.state.password 
     }).then(function(response){ 
     console.log(response.data.success) 
     this.context.router.push('/home'); 
     }) 
    } 
    render(){ 
    return(
     <BrowserRouter> 
     <Route path="/" render={() => (
      <div> 
      <h1> Sign Up</h1> 
      <input name="email" placeholder="enter your email" onChange={e => this.handleChange(e)}/> 
      <br/> 
      <input name="password" placeholder="enter your password" onChange={e => this.handleChange(e)}/> 
      <br/> 
      <button onClick={() => this.handleClick()}>submit</button> 
      <Route exact path="/home" component={Home}/> 
      </div> 
     )}/> 
     </BrowserRouter> 
    ) 
    } 
} 

SignUp.contextTypes = { 
    router: React.PropTypes.func.isRequired 
}; 

export default SignUp 
+0

Die Funktion muss verknüpft werden, damit der entsprechende Kontext zum Funktionshandler z. 'this.handleClick.bind (this)()' oder einfacher gesagt, 'onClick = {this.handleClick.bind (this)}' – char

+0

Danke für die Eingabe, ich habe dies gebunden und noch Kontext ist undefiniert! !! – hyper0009

+0

haben Sie versucht, importieren Sie {browserHistory} von 'Reagieren-Router'; browserHistory.push ('/'); –

Antwort

0

Routen sollten immer oberhalb aller Ihrer Komponenten (oder Container) liegen. Wenn eine Komponente "innerhalb" des Routers ist (in Ihrem Fall BrowserRouter), erhält sie Zugriff auf ihren Kontext.

Auch haben Sie innerhalb Render-Funktion von einem anderen, die überhaupt keinen Sinn macht.

So etwas wie dies funktionieren soll:

import React, {Component} from 'react' 
import axios from 'axios' 
import Home from './Home' 
import { 
    BrowserRouter, 
    Link, 
    Route 
} from 'react-router-dom' 

class SignUp extends Component { 

    constructor(props){ 
    super(props); 
    this.state = { 
     email: '', 
     password: '' 
    }; 
    } 

    handleChange = (e) => { 
    this.setState({ 
     [e.target.name]: e.target.value 
    }) 
    } 

    handleClick =() => { 
    axios 
    .post('http://localhost:9000/signup',{ 
     email: this.state.email, 
     password: this.state.password 
    }).then(function(response){ 
     console.log(response.data.success) 
     this.context.router.push('/home'); 
    }) 
    } 

    render(){ 
    return(
     <div> 
     <h1> Sign Up</h1> 
     <input name="email" placeholder="enter your email" onChange={e => this.handleChange(e)}/> 
     <br/> 
     <input name="password" placeholder="enter your password" onChange={e => this.handleChange(e)}/> 
     <br/> 
     <button onClick={() => this.handleClick()}>submit</button> 
     </div> 
    ) 
    } 
} 

SignUp.contextTypes = { 
    router: React.PropTypes.func.isRequired 
}; 

class App extends Component { 
    render() { 
    return(
     <BrowserRouter> 
     <Route path="/" component={SignUp} /> 
     <Route exact path="/home" component={Home}/> 
     </BrowserRouter>) 
    } 
} 

export default App; 

Und natürlich Komponente bewegen SignUp Datei Eigenständig das Projekt sauber und gut strukturiert zu halten.

+0

Danke für die Rückmeldung ! Durch das Verschieben der Routen auf die oberste Ebene wurde das Problem behoben, dass der Kontext nicht definiert wurde. wie in ich bekomme kein fehler mehr, aber es leitet mich nicht zu meinem zuhause komponent (klick auf den button hält mich auf der gleichen '/' route) – hyper0009

+0

Eigentlich denke ich habe ich meine hoffnungen auf. Ich habe nicht einmal die onClick-Funktion richtig ausgeführt, weshalb der Kontext keinen Fehler verursachte. Nachdem ich den onClick richtig funktioniert habe, bekomme ich den Kontext wieder undefiniert, sogar nachdem ich ihn gebunden habe! – hyper0009

Verwandte Themen