यदि आप ब्राउज़र वातावरण को लक्षित कर रहे हैं, तो आपको react-router-dom
इसके बजाय पैकेज का उपयोग करने की आवश्यकता है react-router
। वे उसी दृष्टिकोण का अनुसरण कर रहे हैं, जैसा कि कोर को अलग करने के लिए रिएक्ट ने किया था, ( react
) और प्लेटफ़ॉर्म विशिष्ट कोड ( react-dom
, react-native
) सूक्ष्म अंतर के साथ, जिसे आपको दो अलग-अलग पैकेजों को स्थापित करने की आवश्यकता नहीं है, इसलिए पर्यावरण पैकेज में सब कुछ शामिल है आप की जरूरत है। आप इसे अपनी परियोजना में जोड़ सकते हैं:
yarn add react-router-dom
या
npm i react-router-dom
सबसे पहली बात जो आपको करने की ज़रूरत है वह यह है कि <BrowserRouter>
आपके आवेदन में सबसे अधिक मूल घटक के रूप में प्रदान किया जाए । <BrowserRouter>
HTML5 history
API का उपयोग करता है और इसे आपके लिए प्रबंधित करता है, इसलिए आपको इसे स्वयं इंस्टेंट करने और <BrowserRouter>
एक घटक के रूप में इसे पास करने के बारे में चिंता करने की ज़रूरत नहीं है (जैसा कि आपको पिछले संस्करणों में करने की आवश्यकता थी)।
V4 में, प्रोग्रामेटिक रूप से नेविगेट करने के लिए, आपको history
ऑब्जेक्ट को एक्सेस करने की आवश्यकता होती है , जो कि रिएक्ट के माध्यम से उपलब्ध है context
, जब तक कि आपके पास अपने आवेदन में शीर्ष सबसे माता-पिता के रूप में एक <BrowserRouter>
प्रदाता घटक है। पुस्तकालय संदर्भ के माध्यम से router
वस्तु को उजागर करता है , जो स्वयं history
एक संपत्ति के रूप में समाहित करता है। history
इंटरफेस जैसे कई नेविगेशन तरीकों, प्रदान करता है push
, replace
और goBack
दूसरों के बीच में,। आप गुणों और विधियों की पूरी सूची यहां देख सकते हैं ।
Redux / Mobx उपयोगकर्ताओं के लिए महत्वपूर्ण नोट
यदि आप अपने आवेदन में अपने राज्य प्रबंधन पुस्तकालय के रूप में redux या mobx का उपयोग कर रहे हैं, तो आप उन घटकों के साथ समस्याएँ ले सकते हैं, जिन्हें स्थान-पता होना चाहिए, लेकिन URL अपडेट ट्रिगर करने के बाद पुन: रेंडर नहीं किए गए हैं
ऐसा इसलिए हो रहा है क्योंकि संदर्भ मॉडल का उपयोग कर घटकों को react-router
पास location
किया जाता है।
कनेक्ट और ऑब्जर्वर दोनों ऐसे कंपोनेंट बनाते हैं जिनके कंधों पर यूट्यूड के तरीके उनके करंट प्रॉप्स और उनके प्रॉप्स की तुलना में उथले तुलना करते हैं। कम से कम एक प्रोप बदल गया है, जब वे घटक केवल फिर से प्रस्तुत करना होगा। इसका मतलब यह है कि स्थान बदलने पर उन्हें अपडेट करने के लिए यह सुनिश्चित करने के लिए, उन्हें स्थान बदलने पर बदलने वाला एक प्रोप देने की आवश्यकता होगी।
इसे हल करने के लिए 2 दृष्टिकोण हैं:
- अपने कनेक्टेड घटक को एक पथहीन में लपेटें
<Route />
। वर्तमान location
वस्तु एक सहारा है जो <Route>
उस घटक को देता है जो इसे प्रस्तुत करता है
- उच्च-क्रम वाले घटक के साथ अपने जुड़े घटक को लपेटें
withRouter
, वास्तव में एक ही प्रभाव होता है और location
एक प्रोप के रूप में इंजेक्शन होता है
यह निर्धारित करते हुए कि सिफारिश के अनुसार, प्रोग्राम को नेविगेट करने के चार तरीके हैं:
1.- एक <Route>
घटक का उपयोग करना
यह एक घोषणात्मक शैली को बढ़ावा देता है। V4 से पहले,
<Route />
घटकों को आपके घटक पदानुक्रम के शीर्ष पर रखा गया था, जो आपके मार्गों की संरचना के बारे में पहले से सोच रहा था। हालाँकि, अब आपके पास अपने पेड़ में
कहीं भी<Route>
घटक हो सकते हैं , जिससे आपको URL के आधार पर सशर्त रूप से रेंडरिंग के लिए बेहतर नियंत्रण मिल सकता है। इंजेक्शन , और अपने घटक में सहारा के रूप में। नेविगेशन तरीकों (जैसे , , ...) के गुणों के रूप में उपलब्ध हैं वस्तु।
Route
match
location
history
push
replace
goBack
history
या Route
तो component
, render
या children
रंगमंच की सामग्री का उपयोग करके कुछ के साथ प्रस्तुत करने के 3 तरीके हैं , लेकिन एक से अधिक का उपयोग न करें Route
। चुनाव उपयोग के मामले पर निर्भर करता है, लेकिन मूल रूप से पहले दो विकल्प केवल आपके घटक को प्रस्तुत करेंगे यदि path
url स्थान से मेल खाता है, जबकि children
घटक के साथ प्रदान किया जाएगा कि पथ स्थान से मेल खाता है या नहीं (URL के आधार पर UI को समायोजित करने के लिए उपयोगी) मेल मिलाना)।
यदि आप अपने घटक रेंडरिंग आउटपुट को कस्टमाइज़ करना चाहते हैं , तो आपको अपने कंपोनेंट को किसी फ़ंक्शन में लपेटने और render
विकल्प का उपयोग करने की आवश्यकता है, ताकि आपके कंपोनेंट को पास करने के लिए match
, location
और इसके अलावा आपकी इच्छा के किसी अन्य प्रॉपर को पास किया जा सके history
। उदाहरण के लिए उदाहरण:
import { BrowserRouter as Router } from 'react-router-dom'
const ButtonToNavigate = ({ title, history }) => (
<button
type="button"
onClick={() => history.push('/my-new-location')}
>
{title}
</button>
);
const SomeComponent = () => (
<Route path="/" render={(props) => <ButtonToNavigate {...props} title="Navigate elsewhere" />} />
)
const App = () => (
<Router>
<SomeComponent /> // Notice how in v4 we can have any other component interleaved
<AnotherComponent />
</Router>
);
2.- withRouter
HoC का उपयोग करना
यह उच्च क्रम घटक समान प्रॉप्स को इंजेक्ट करेगा Route
। हालाँकि, यह सीमा को पार करता है कि आपके पास प्रति फ़ाइल केवल 1 HoC हो सकता है।
import { withRouter } from 'react-router-dom'
const ButtonToNavigate = ({ history }) => (
<button
type="button"
onClick={() => history.push('/my-new-location')}
>
Navigate
</button>
);
ButtonToNavigate.propTypes = {
history: React.PropTypes.shape({
push: React.PropTypes.func.isRequired,
}),
};
export default withRouter(ButtonToNavigate);
3.- एक Redirect
घटक का उपयोग करना
रेंडरिंग एक
<Redirect>
नए स्थान पर नेविगेट करेगा। लेकिन ध्यान रखें कि,
डिफ़ॉल्ट रूप से , वर्तमान स्थान को सर्वर-रिडायरेक्ट्स (HTTP 3xx) की तरह नए से बदल दिया जाता है। नया स्थान
to
प्रोप द्वारा प्रदान किया गया है, जो एक स्ट्रिंग (URL को पुनर्निर्देशित करने के लिए) या एक
location
वस्तु हो सकता है। यदि आप इसके बजाय
इतिहास पर एक नई प्रविष्टि को
आगे बढ़ाना चाहते हैं , तो एक
push
प्रस्ताव भी पास करें और इसे सेट करें
true
<Redirect to="/your-new-location" push />
4.- router
संदर्भ के माध्यम से मैन्युअल रूप से एक्सेस करना
थोड़ा हतोत्साहित क्योंकि
संदर्भ अभी भी एक प्रयोगात्मक एपीआई है और यह प्रतिक्रिया के भविष्य के रिलीज में टूटने / बदलने की संभावना है
const ButtonToNavigate = (props, context) => (
<button
type="button"
onClick={() => context.router.history.push('/my-new-location')}
>
Navigate to a new location
</button>
);
ButtonToNavigate.contextTypes = {
router: React.PropTypes.shape({
history: React.PropTypes.object.isRequired,
}),
};
कहने की आवश्यकता नहीं है कि अन्य राउटर घटक भी हैं जो गैर ब्राउज़र पारिस्थितिक तंत्र के लिए होते हैं, जैसे <NativeRouter>
कि मेमोरी में नेविगेशन स्टैक की प्रतिकृति और react-router-native
पैकेज के माध्यम से उपलब्ध रिएक्ट नेटिव प्लेटफॉर्म को लक्षित करता है ।
किसी भी अन्य संदर्भ के लिए, आधिकारिक डॉक्स पर एक नज़र डालने में संकोच न करें । पुस्तकालय के सह-लेखकों में से एक द्वारा बनाया गया एक वीडियो भी है जो प्रतिक्रिया-राउटर v4 के लिए एक अच्छा शांत परिचय प्रदान करता है, जिसमें कुछ बड़े बदलावों पर प्रकाश डाला गया है।