Περισσότερα
Προγραμματισμένη πλοήγηση με τη χρήση react router
Με το react-router
μπορώ να χρησιμοποιήσω το στοιχείο Link
για να δημιουργήσω συνδέσμους που χειρίζεται εγγενώς το react router.
Βλέπω ότι εσωτερικά καλεί το this.context.transitionTo(...)
.
Θέλω να κάνω μια πλοήγηση, αλλά όχι από ένα σύνδεσμο, από μια dropdown επιλογή για παράδειγμα. Πώς μπορώ να το κάνω αυτό στον κώδικα; Τι είναι το this.context
;
Είδα το mixin Navigation
, αλλά μπορώ να το κάνω αυτό χωρίς mixins;
1245
3
Μπορείτε να χρησιμοποιήσετε το νέο άγκιστρο
useHistory
στα λειτουργικά στοιχεία και στην προγραμματιστική πλοήγηση:Στην έκδοση 4.0 και πάνω, χρησιμοποιήστε το ιστορικό ως prop του συστατικού σας.
ΣΗΜΕΙΩΣΗ: το this.props.history δεν υπάρχει στην περίπτωση που το στοιχείο σας δεν έχει αποδοθεί από το
. Θα πρέπει να χρησιμοποιήσετε το
για να έχετε το this.props.history στο YourComponentReact-Router 3.0.0+ Απάντηση
Στην έκδοση 3.0 και άνω, χρησιμοποιήστε το δρομολογητή ως prop του συστατικού σας.
Στην έκδοση 2.4 και άνω, χρησιμοποιήστε ένα συστατικό ανώτερης τάξης για να λάβετε το δρομολογητή ως στήριγμα του συστατικού σας.
Αυτή η έκδοση είναι συμβατή προς τα πίσω με την έκδοση 1.x, οπότε δεν υπάρχει ανάγκη για Οδηγό αναβάθμισης. Η απλή εξέταση των παραδειγμάτων θα πρέπει να είναι αρκετή.
Τούτου λεχθέντος, εάν επιθυμείτε να μεταβείτε στο νέο πρότυπο, υπάρχει'ένα module browserHistory μέσα στο δρομολογητή στο οποίο μπορείτε να έχετε πρόσβαση με την εντολή
import { browserHistory } from 'react-router'
Τώρα έχετε πρόσβαση στο ιστορικό του προγράμματος περιήγησής σας, ώστε να μπορείτε να κάνετε πράγματα όπως push, replace, κλπ... Όπως:
'/some/path')`
Περαιτέρω ανάγνωση: Ιστορίες και Navigation
React-Router 1.x.x Απάντηση
Δεν θα υπεισέλθω σε λεπτομέρειες αναβάθμισης. Μπορείτε να διαβάσετε σχετικά στον Οδηγό αναβάθμισης
Η κύρια αλλαγή σχετικά με την ερώτηση εδώ είναι η αλλαγή από Navigation mixin σε History. Τώρα χρησιμοποιεί το historyAPI του προγράμματος περιήγησης για να αλλάξει τη διαδρομή, οπότε θα χρησιμοποιούμε την
pushState()
από εδώ και στο εξής.Εδώ'είναι ένα παράδειγμα που χρησιμοποιεί Mixin:
Σημειώστε ότι αυτό το
History
προέρχεται από το έργο rackt/history. Όχι από το ίδιο το React-Router.Αν δεν θέλετε να χρησιμοποιήσετε το Mixin για κάποιο λόγο (ίσως λόγω της κλάσης ES6), τότε μπορείτε να έχετε πρόσβαση στο ιστορικό που λαμβάνετε από τον δρομολογητή από το
this.props.history
. Θα είναι προσβάσιμο μόνο για τα στοιχεία που αποδίδονται από το Router σας. Έτσι, αν θέλετε να το χρησιμοποιήσετε σε οποιοδήποτε παιδικό συστατικό πρέπει να μεταβιβαστεί ως χαρακτηριστικό μέσω τουprops
.Μπορείτε να διαβάσετε περισσότερα για τη νέα έκδοση στην τεκμηρίωση 1.0.x
Εδώ είναι μια σελίδα βοήθειας ειδικά για την πλοήγηση εκτός του συστατικού σας
Συνιστά την αρπαγή μιας αναφοράς
history = createHistory()
και την κλήση τουreplaceState
σε αυτήν.Αντιμετώπισα το ίδιο πρόβλημα και μπόρεσα να βρω τη λύση μόνο με το Navigation mixin που συνοδεύει το react-router.
Εδώ's πώς το έκανα
Ήμουν σε θέση να καλέσω την
transitionTo()
χωρίς την ανάγκη πρόσβασης στο.context
Ή θα μπορούσατε να δοκιμάσετε το φανταχτερό ES6
class
Το React-Router-Redux έχει μερικές διαθέσιμες μεθόδους που επιτρέπουν την απλή πλοήγηση μέσα από τους δημιουργούς ενεργειών. Αυτές μπορεί να είναι ιδιαίτερα χρήσιμες για άτομα που έχουν υπάρχουσα αρχιτεκτονική στο React Native και επιθυμούν να χρησιμοποιήσουν τα ίδια μοτίβα στο React Web με ελάχιστο boilerplate overhead.
Εξερευνήστε τις ακόλουθες μεθόδους:
push(location)
replace(location)
go(number)
goBack()
goForward()
Εδώ είναι ένα παράδειγμα χρήσης, με Redux-Thunk:
./actioncreators.js
./viewcomponent.js
Για την πιο πρόσφατη έκδοση (
v2.0.0-rc5
), η συνιστώμενη μέθοδος πλοήγησης είναι η απευθείας ώθηση στο singleton του ιστορικού. Μπορείτε να το δείτε αυτό σε δράση στο Πλοήγηση εκτός του εγγράφου Components.Σχετικό απόσπασμα:
Εάν χρησιμοποιείτε το νεότερο API του react-router, θα πρέπει να κάνετε χρήση του
history
από τοthis.props
όταν μέσα στα components έτσι:Προσφέρει επίσης το
pushState
, αλλά αυτό είναι απαρχαιωμένο σύμφωνα με τις καταγεγραμμένες προειδοποιήσεις.Αν χρησιμοποιείτε το
react-router-redux
, προσφέρει μια συνάρτησηpush
που μπορείτε να αποστείλετε ως εξής:Ωστόσο, αυτό μπορεί να χρησιμοποιηθεί μόνο για την αλλαγή της διεύθυνσης URL, όχι για την πραγματική πλοήγηση στη σελίδα.
Μπορείτε να το κάνετε αυτό και χωρίς mixins.
Το πρόβλημα με τα contexts είναι ότι δεν είναι προσβάσιμα αν δεν ορίσετε τους
contextTypes
στην κλάση.Όσο για το τι είναι το context, είναι ένα αντικείμενο, όπως τα props, που μεταβιβάζονται από τον γονέα στο παιδί, αλλά μεταβιβάζονται σιωπηρά, χωρίς να χρειάζεται να επαναδηλώνετε τα props κάθε φορά. Βλέπε https://www.tildedave.com/2014/11/15/introduction-to-contexts-in-react-js.html