2017-07-29 48 views
2

我使用陣營潰敗V-4'this.props.match.params` ** **未定義和'staticContext`未定義

"react": "^15.6.1", 
    "react-dom": "^15.6.1", 
    "react-router": "^4.1.2", 

野兔我擊潰:

<BrowserRouter> 
     <div> 
      <Route exact path='/' component={Layout}></Route> 
      <Route path='/about' name="about" component={About}> 
       <Route path="/:article" component={anotherAbout}></Route> 
      </Route> 
      <Route path='/protfolio' name="protfolio" component={Portfolio}></Route> 
     </div> 
    </BrowserRouter > 

當我打電話{this.props.match.params.article}它給不確定

我的控制檯:this.props enter image description here

爲什麼staticContext: undefined和我的props.match.params爲空對象。

+0

@KyleRichardson這些都不是同樣的問題... –

+0

您是否嘗試過你的嵌套正確的路線,看看你的問題是固定的嗎? –

回答

0

刪除斜線嵌套路線path=":article"而不是path="/:article"

+0

沒有變化......輸出仍然是'undefined' –

+0

@JavaScriptLearner爲什麼你使用相同的組件嵌套路線?嘗試在嵌套路由中使用component = {AnotherComponent},並顯然將console.log(this.props)移動到AnotherComponent。 –

+0

我是新來的,我正在練習,並嘗試學習,但現在我無法得到'props.match.params'我不知道它爲什麼顯示爲null –

2

之前看看這個basic example從反應路由器v4的文檔。

看看const Topics = ({ match }) => (...),你會在這個組件的底部看到嵌套的路線。這就是你在react-router v4中嵌套路由的方式。如果你解決這個問題,你應該解決問題。

import React from 'react' 
import { 
    BrowserRouter as Router, 
    Route, 
    Link 
} from 'react-router-dom' 

const BasicExample =() => (
    <Router> 
    <div> 
     <ul> 
     <li><Link to="/">Home</Link></li> 
     <li><Link to="/about">About</Link></li> 
     <li><Link to="/topics">Topics</Link></li> 
     </ul> 

     <hr/> 

     <Route exact path="/" component={Home}/> 
     <Route path="/about" component={About}/> 
     <Route path="/topics" component={Topics}/> 
    </div> 
    </Router> 
) 

const Home =() => (
    <div> 
    <h2>Home</h2> 
    </div> 
) 

const About =() => (
    <div> 
    <h2>About</h2> 
    </div> 
) 

const Topics = ({ match }) => (
    <div> 
    <h2>Topics</h2> 
    <ul> 
     <li> 
     <Link to={`${match.url}/rendering`}> 
      Rendering with React 
     </Link> 
     </li> 
     <li> 
     <Link to={`${match.url}/components`}> 
      Components 
     </Link> 
     </li> 
     <li> 
     <Link to={`${match.url}/props-v-state`}> 
      Props v. State 
     </Link> 
     </li> 
    </ul> 

    <Route path={`${match.url}/:topicId`} component={Topic}/> 
    <Route exact path={match.url} render={() => (
     <h3>Please select a topic.</h3> 
    )}/> 
    </div> 
) 

const Topic = ({ match }) => (
    <div> 
    <h3>{match.params.topicId}</h3> 
    </div> 
) 

export default BasicExample 
+0

你有多搞笑複製形式文檔鏈接已經從@maxim得到評論..順便說一句,感謝您的幫助:) –

+1

不知道你的意思是如何有趣的是我從文檔中複製了一些東西......我提供了它,因爲鏈接可能過時,這是爲了幫助整個社區。無論如何,是的,你需要爲任何你想嵌套路由的頁面做這件事。雖然你可能不需要嵌套路由,你可能只需要根據搜索參數在組件內進行條件呈現。如果是這樣的話,你應該看看HoC [withRouter](https://reacttraining.com/react-router/web/api/withRouter)。 –

+0

對不起我的壞評論其實,我已經從#maxim評論[Link__](https://reacttraining.com/react-router/web/example/basic)解決了。 但是,感謝您的建議,我也將學**與路由器** –