2016-10-12 9 views
5

निम्न कोड में, राउटर/नेविगेशनप्रोवाइडर द्वारा प्रदत्त सभी घटकों के लिए डेटाबेस चर को पारित करने का सबसे अच्छा तरीका क्या है?ExNavigation: सभी राउटर घटकों के लिए प्रोप कैसे पास करें?

import { 
    createRouter, 
    NavigationProvider, 
    StackNavigation, 
} from '@exponent/ex-navigation' 

const Router = createRouter(() => ({ 
    jobs:() => Jobs, 
    sample:() => Sample 
})) 

render() { 
    const database = this.openDatabase() 
    <NavigationProvider router={Router}> 
     <StackNavigation initialRoute={Router.getRoute('home')} /> 
    </NavigationProvider> 
} 

धन्यवाद!

+0

क्या आपने इसे इस तरह हल किया है? मैं [पूर्व नेविगेशन घटक] (https://github.com/exponent/ex-navigation) के साथ एक ही चीज़ को प्राप्त करने की कोशिश कर रहा हूं। अगर आप कुछ स्निपेट साझा कर सकते हैं तो मदद मिलेगी। –

+0

स्वीकार किए गए उत्तर ने इस उदाहरण में मेरे लिए इसे हल किया। बस एक फ़ाइल (सेवाएं/डेटाबेस.जेएस) बनाएं और जब आपको इसकी आवश्यकता हो तो डीबी इंस्टेंस आयात करें – cmrichards

+0

@ चिचर्ड्स: मैं देखता हूं, धन्यवाद! –

उत्तर

-2

आपको एक नई जावास्क्रिप्ट फ़ाइल बनाना चाहिए जो आपके डेटाबेस कनेक्शन को निर्यात करे और इसे अपने घटक में आयात करें जिसे आप इसका उपयोग करना चाहते हैं।

आप उच्च ऑर्डर घटक भी बना सकते हैं जो आपके घटक के प्रोप के रूप में डेटाबेस कनेक्शन देता है। यह withNavigation जैसा है जो एक्सनेविगेशन या connect में अंतर्निहित है जो रेडक्स की प्रतिक्रिया बाइंडिंग के साथ आता है।

हालांकि, चूंकि एचओसी थोड़ा उन्नत विषय है (लेकिन समझने में कठोर नहीं है!) यहां इसके बिना एक उदाहरण है।

सेवाओं/database.js

// Open database connection here and export it like any other module. 
// The following is pseudo code to illustrate example 

import { database } from 'database' 
export default database.connect() 

routes.js

import Jobs from './containers/Jobs' 
import Sample from './containers/Sample' 
import { createRouter } from '@exponent/ex-navigation' 

const Router = createRouter(() => ({ 
    jobs:() => Jobs, 
    sample:() => Sample 
})) 

export default Router 

App.js

import React from 'react' 
import { 
    NavigationProvider, 
    StackNavigation, 
} from '@exponent/ex-navigation' 

const App =() => (
    <NavigationProvider router={Router}> 
    <StackNavigation initialRoute={Router.getRoute('home')} /> 
    </NavigationProvider> 
) 

export default App 

कंटेनर/जॉब्स.जेएस

import React, { Component } from 'react' 

// Import database connection in every container component you wish to use it 
import databaseConnection from '../services/database' 

export default class Jobs extends Component { 
    state = { 
    jobs: [] 
    } 

    componentDidMount() { 
    databaseConnection 
     .get('jobs') 
     .then(jobs => this.setState({ jobs })) 
    } 

    render() { 
    return (
     {this.state.jobs.map(job => 
     // Render jobs 
    )} 
    ) 
    } 
} 
+1

इसके लिए धन्यवाद। मैं एचओसी से परिचित हूं और रेडक्स कैसे काम करता है। आप सही हैं और आपका उदाहरण इसे करने का सबसे आसान तरीका है। मैंने सोचा कि क्या मुझे किसी प्रकार का पासप्रॉप विकल्प याद आ रहा है जैसे मैंने अन्य राउटर में उपयोग किया है। – cmrichards

+1

लेकिन आपके उदाहरण में, आप प्रोप के रूप में नहीं गुजर रहे हैं, आप बच्चे घटक से 'डेटाबेस कनेक्शन' तक पहुंच रहे हैं। मैं इसे 'ऐप' घटक से कैसे पास करूं? –

+0

हाँ, यह वास्तव में एक जवाब नहीं है। यदि आप प्रोप के रूप में गुजरना चाहते हैं (और मेरे पास ऐसे मामले भी हैं जहां मैं वास्तव में ऐसा करना चाहता हूं), ऐसा लगता है कि पूर्व-नेविगेशन के पास आपके लिए कोई जवाब नहीं है। –

संबंधित मुद्दे

 संबंधित मुद्दे