2017-06-22 184 views
0

中被標記爲需要我在一個組件中的反應路由器中遇到鏈接問題。一旦我嘗試使用鏈接,控制檯將顯示此錯誤:失敗的上下文類型:上下文routerLink中被標記爲需要,但其值爲undefined。我在這裏看到過關於這個問題的所有類似的線程,但是對於這個確切的問題沒有解決方案。我使用所有框架和組件的所有最新版本(幾天前剛剛下載了所有內容),所以它絕對不是升級任何東西。Create-React-App:路由器在鏈接

的結構是這樣的: index.js

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import App from './App'; 
import registerServiceWorker from './registerServiceWorker'; 
import { BrowserRouter as Router, Route} from 'react-router-dom'; 
import { Link } from 'react-router-dom'; 
import About from './components/About'; 
import Posting from './components/Posting'; 
import Groups from './components/Groups'; 


ReactDOM.render(<App />, document.getElementById('app')); 
ReactDOM.render(
    <Router> 
     <div> 
      <Route exact path='/' component={About} /> 
      <Route path='/post' component={Posting} /> 
      <Route path='/groups' component={Groups} /> 
     </div> 
    </Router>, 
    document.getElementById('content') 
); 
registerServiceWorker(); 

App.js

import React, { Component } from 'react'; 
import { BrowserRouter as Router, Route} from 'react-router-dom'; 
import { Link } from 'react-router-dom'; 
import SideMenuUserInfo from './components/sidemenu/SideMenuUserInfo'; 
import SideMenu from './components/sidemenu/SideMenu'; 
import SideMenuFooter from "./components/sidemenu/SideMenuFooter"; 
import TopNav from "./components/topnav/TopNav"; 

class App extends Component { 
    render() { 
     return(
      <div className="main_container"> 
       <div className="col-md-3 left_col"> 
        <div className="left_col scroll-view"> 
         <div className="navbar nav_title" style={{border: 0}}> 
          <a href="index.html" className="site_title"><i className="fa fa-paw"></i> <span>Logo here</span></a> 
         </div> 
         <div className="clearfix"></div> 
         <SideMenuUserInfo /> 
         <br /> 
         <SideMenu /> 
         <SideMenuFooter /> 
        </div> 
       </div> 
       <TopNav /> 
       <div id="content" className="right_col" role="main"> 

       </div> 
       <footer> 
        <div className="pull-right"> 
         Footer text here 
        </div> 
        <div className="clearfix"></div> 
       </footer> 
      </div> 
     ); 
    } 
} 
export default App; 

SideMenuUnfoldLink.js

import React, { Component } from 'react'; 
import { Link } from 'react-router-dom'; 

class SideMenuUnfoldLink extends Component { 

    render() { 

     return(
      <li> 
       <a> 
        <i className={this.props.faClass}></i>{this.props.text}<span className="fa fa-chevron-down"></span> 
       </a> 
       <ul className="nav child_menu"> 
        <li><Link to="/">Home</Link></li> <<<<-- THE PROBLEM IS HERE 
       </ul> 
      </li> 
     ); 
    }; 
} 
export default SideMenuUnfoldLink; 

而且About.js(作爲工作例子的鏈接)

import React, { Component } from 'react'; 
import { Link } from 'react-router-dom'; 

class About extends Component { 
    render() { 
    return (
     <div> 
      <h2>Это About</h2> 
      <ul> 
      <li><Link to="/groups">Groups</Link></li> 
      <li><Link to="/">Main</Link></li> 
      </ul> 
     </div> 
    ); 
    } 
} 
export default About; 

該鏈接與關於組件的魅力一起使用。一旦我在SideMenuUnfoldLink組件中使用鏈接,該錯誤就會開始彈出。 我想在SideMenuUnfoldLink想要使用Link的時候路由器並沒有被初始化。但是我怎麼去解決呢?

回答

0

我剛剛找到解決方案。它是包裹路由器圍繞整個 應用程序,使其可以像這樣所有組件:

render() { 
     return(
      <Router> 
       <div className="main_container"> 
        <div className="col-md-3 left_col"> 
         <div className="left_col scroll-view"> 
          <div className="navbar nav_title" style={{border: 0}}> 
           <a href="index.html" className="site_title"><i className="fa fa-paw"></i> <span>Logo here</span></a> 
          </div> 
          <div className="clearfix"></div> 
          <SideMenuUserInfo /> 
          <br /> 
          <SideMenu /> 
          <SideMenuFooter /> 
         </div> 
        </div> 
        <TopNav /> 
        <div id="content" className="right_col" role="main"> 

        </div> 
        <footer> 
         <div className="pull-right"> 
          Footer text here 
         </div> 
         <div className="clearfix"></div> 
        </footer> 
       </div> 
      </Router> 
     ); 
    } 

當然和刪除這一部分:

ReactDOM.render(
    <Router> 
     <div> 
      <Route exact path='/' component={About} /> 
      <Route path='/post' component={Posting} /> 
      <Route path='/groups' component={Groups} /> 
     </div> 
    </Router>, 
    document.getElementById('content') 
); 

這裏有一個更詳細的解釋https://reacttraining.com/react-router/ 地段感謝那個視頻的作者:)