2017-07-17 14 views
6

मुझे उत्पाद के साथ अपने पृष्ठ पर पास आईडी के साथ समस्या है, मैं eveything कोशिश करता हूं और उत्तर खोजता हूं लेकिन यह अभी भी काम नहीं करता है।इस पर प्रतिक्रिया दें .props.params अपरिभाषित

import React from "react"; 
import {render} from "react-dom"; 
import {Router, Route, IndexRoute, hashHistory} from "react-router"; 

import {Menu} from './components/Menu'; 
import {MainPage} from './components/MainPage'; 
import {DetailsProduct} from './components/DetailsProduct'; 

class App extends React.Component{ 

    render(){ 
     return(
     <Router history={hashHistory}> 
      {/* <IndexRoute component={Menu}></IndexRoute> */} 
      <Route path="/" component={()=>(<div><Menu/><MainPage/></div>)}></Route> 
      <Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route> 
     </Router> 
     ) 
    } 
} 

render(<App/>, window.document.getElementById("app")); 

और DetalisProduct (पेज: http://localhost:8080/#/product/1)

यहाँ मेरी index.js है

import React from "react";  
export class DetailsProduct extends React.Component{ 

    render(){ 
     console.log(this.props.params); <-- this is undefined 

     return(
      <h1>Product</h1> 
     ) 
    } 
} 
+0

'this.props.params' में आप क्या देखने की उम्मीद कर रहे हैं? – Andrew

+0

मैंने नहीं देखा कि आप के प्रोप पास कर रहे हैं? –

+0

<मार्ग पथ = {"उत्पाद /: आईडी"} घटक = {विवरण उत्पाद}> यह अब काम करता है लेकिन मुझे दो घटक "मेनू और विवरण उत्पाद" पास करना होगा, क्या आप जानते हैं कि मैं यह कैसे कर सकता हूं? –

उत्तर

2

इस बदलें:

साथ
<Route path={"product/:id"} component={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route> 

:

<Route path={"product/:id"} component={DetailsProduct}></Route> 
+0

वाह धन्यवाद यह काम करते हैं, लेकिन मैं कैसे दो घटकों को पारित कर सकते हैं? –

+0

आप एक मार्ग में 2 घटक क्यों पारित करना चाहते हैं? यह सही नहीं होगा! या यदि आप नेस्टेड मार्ग/घटकों की तलाश में हैं जो काफी संभव है। – Fawaz

+1

@ फ़वाज़ मेरे उत्तर की जांच करें यदि आप अभी भी –

1

मुझे लगता है कि आप react-router v4 का उपयोग नहीं कर रहे हैं, लेकिन या तो v2.x.x या v3.x.x। उस मामले में आप अपने मार्गों पुनर्गठन चाहिए और आप के रूप में

<Router history={hashHistory}> 
     <Route path="/" component={Layout}> 
       <IndexRoute components={{menu: Menu, mainPage: MainPage}}/> 
       <Route path={"product/:id"} component={{menu: Menu, detail: DetailsProduct}}/> 
     </Route> 
    </Router> 

और मेनू घटक इसके अलावा में जिस तरह से आप यह चाहते काम अपेक्षाकृत react-router v4 का उपयोग कर ऐसा करने के लिए बहुत आसान है components रंगमंच की सामग्री का उपयोग कर कई घटक पारित कर सकते हैं। उस मामले में आप प्रोप के उपयोग के एक घटक प्रदान करने के लिए रेंडर कर सकता है और आप इसे

import {HashRouter as Router, Route} from 'react-router-dom'; 
... 
<Router> 
    <Route path="/" render={()=>(<div><Menu/><MainPage/></div>)}></Route> 
    <Route path={"product/:id"} render={()=>(<div><Menu/><DetailsProduct>asd</DetailsProduct></div>)}></Route> 
</Router> 
8

मैं भी एक ही समस्या है जब मैं this.props.params.id इस्तेमाल किया हो रही थी के साथ निम्न कर सकता है।

लेकिन जब मैं घटक जहाँ मैं आईडी गुजर रहा हूँ में console.log(this.props) डालने की कोशिश की, यह पता चलता मैच वस्तु में मेरे आईडी तो उपयोग:

this.props.match.params.id 

आईडी प्राप्त करने के लिए (नोटिस जोड़ा match)।

+1

में कई घटक हैं, तो यह मेरे लिए भी काम करता है ... किसी को भी पता है क्यों? –

+0

क्यों काम करता है^काम करता है? क्या यह प्रतिक्रिया राउटर संस्करण पर आधारित है? – mayaah

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