2015-02-11 5 views
9

Buduję aplikację przy użyciu architektury Facebook flux z React JS. Mam podstawową część aplikacji, w której mam formularz logowania. Pobieram wynik z serwera węzła, aby zweryfikować użytkownika w sklepie, otrzymuję wynik z serwera, Teraz utknąłem, że w jaki sposób mogę przekierować użytkownika do strony głównej po sukcesie.Jak przekierować po sukcesie z ajax call używając React-router-component?

Przeczytałem o składniku routera reagowania i jestem w stanie przekierować po stronie klienta, ale nie jest w stanie przekierować w momencie pobierania wyniku z ajax w sklepie. Proszę pomóż mi.

Odpowiedz

9

Należy użyć funkcji transitionTo z zestawu Navigation: http://git.io/NmYH. To byłoby coś takiego:

// I don't know implementation details of the store, 
// but let's assume it has `login` function that fetches 
// user id from backend and then calls a callback with 
// this received id 
var Store = require('my_store'); 
var Router = require('react-router'); 

var MyComponent = React.createClass({ 
    mixins: [Router.Navigation], 

    onClick: function() { 
    var self = this; 
    Store.login(function(userId){ 
     self.transitionTo('dashboard', {id: userId}); 
    }); 
    }, 

    render: function() { 
    return: <button onClick={this.onClick}>Get user id</button>; 
    } 
}); 
+0

Próbowałem, ale teraz zmienił adres URL, ale nie pokazuje tego składnika. – Toretto

+0

Czy to działa, jeśli zmienisz adres URL ręcznie? Prawdopodobnie powinieneś sprawdzić, czy twoja trasa odwołuje się do właściwego komponentu, a nie do tego samego formularza logowania, z którego przechodzisz. – kulesa

+0

Dodałem link na górze podążając za http://vimeo.com/channels/797633/page:5 "Lekcja 7" dla routingu i działa dobrze. Kiedy kliknę na ten link przekieruje go na tę stronę i pokazuje wynik, ale nie w przypadku powyższego? – Toretto

1

To powinno działać

var Store = require('Store'); 
var Navigatable = require('react-router-component').NavigatableMixin 

var LoginComponent = React.createClass({ 
    mixins: [ Navigatable ], 

    onClick: function() { 
     Store.login(function(userId){ 
      this.navigate('/user/' + userId) 
     }.bind(this)); 
    }, 

    render: function() { 
     return <button onClick={this.onClick}>Login</button>; 
    } 
}); 
2

on pracował dla mnie, kiedy dodany do reagują właściwości elementu require do routera i używany router tak:

// this is the redirect 
    this.context.router.push('/search'); 

// this should appear outside the element 
    LoginPage.contextTypes = { 
     router: React.PropTypes.object.isRequired 
    }; 
    module.exports = LoginPage;