3

Im在生產環境中運行react-router-dom時遇到問題。雖然我的應用程序頁眉和頁腳渲染得很好,但路由器無法正常工作,並且在Chrome devtools中檢查html時,我可以看到下面的註釋,在這些註釋中我的路線應該出現。我沒有得到控制檯錯誤。React路由器v4無法正常工作

<div> 
    <!-- react-empty: 15 --> 
    <!-- react-empty: 16 --> 
    <!-- react-empty: 17 --> 
    <!-- react-empty: 18 --> 
</div> 

這是我App.js組件文件:

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

import styled from 'styled-components'; 

import Header from 'components/Header'; 
import Footer from 'components/Footer'; 

import Home from 'containers/Home'; 
import Select from 'containers/Select'; 
import Process from 'containers/Process'; 
import Privacy from 'containers/Privacy'; 

const AppWrapper = styled.div` 
    font-family: 'Open Sans', sans-serif; 
    width: 100%; 
    max-width: calc(768px + 16px * 2); 
    margin: 0 auto; 
    display: flex; 
    height: 100%; 
    flex-direction: column; 
`; 

class App extends Component { 
    ... 

    render() { 
     return (
      <Router> 
       <AppWrapper> 
        <Header/> 
         <div> 
          <Route exact path='/' render={({history}) => 
           <Home infoHandler={this.handleUserInfo} 
            imageHandler={this.handleImage} 
            history={history}/> 
          }/> 
          <Route exact path='/select' render={({history}) => 
           <Select info={this.state.userInfo} 
            image={this.state.userImage} 
            selectionHandler={this.handleSelectedImage} 
            history={history}/> 
          }/> 
          <Route exact path='/process' render={({history}) => 
           <Process image={this.state.selectedImage} user={this.state.userInfo}/> 
          }/> 
          <Route exact path='privacy' component={Privacy}/> 
         </div> 
        <Footer/> 
       </AppWrapper> 
      </Router> 
     ) 
    } 
} 

export default App; 

這是我的index.js文件:

import React from 'react'; 
import {render} from 'react-dom'; 
import App from 'containers/App'; 

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

的路由器工作就像在開發模式的魅力。使用Webpack進行構建。

**首頁組件:

import React, {Component} from 'react'; 

import FacebookLogin from 'components/FacebookLogin'; 
import {Row, Col} from 'react-flexbox-grid'; 

import styled from 'styled-components'; 
import palette from 'palette'; 

const Img = styled.img` 
    max-width: 100%; 
`; 

const H3 = styled.h3` 
    color: ${palette.black}; 
`; 

class Home extends Component { 
    render() { 
     return(
      <Row center='xs'> 
       <Col xs={12}> 
        <Img src="https://res.cloudinary.com/julsgc/image/upload/v1491106020/Boletia_995x380__2_fqawa8.png"/> 
       </Col> 
       <Col xs={12}> 
        <h3> A que Ser Extraordinario te pareces!? </h3> 
       </Col> 
       <Col xs={12}> 
        <p> Averigualo ahora! </p> 
       </Col> 
       <Col> 
        <FacebookLogin 
         infoCallback={this.props.infoHandler} 
         imageCallback={(data) => { 
          this.props.imageHandler(data); 
          this.props.history.push('/select'); 
         }}/> 
       </Col> 
      </Row> 
     ); 
    } 
} 

Home.propTypes = { 
    history: React.PropTypes.object 
} 

export default Home; 

*更新*

的應用已切換到哈希路由器後工作。根據文檔,BrowserRouter是推薦的方法,因此有任何進一步的意見。

+0

這可能幫助,或它可能會讓事情變得更糟。我查看了你的代碼,看起來很好。不知道發生了什麼事。好奇,你有沒有想過? –

+0

我還沒弄明白。如果我理解正確,[此]線程提到註釋是React處理空分量的方式。我將代碼添加到應該呈現的Home組件,也許這可以揭示錯誤?非常感謝:) –

+1

進入相同的問題,HashRouter工作正常,但不是BrowserRouter,仍在尋找解決方案。 – Guruganesh

回答

-1

如果妳使用的WebPack請把這個Thread

看看,然後只需添加 -

devServer{ 
    historyApiFallback: true 
} 

而對於gulp使用以下命令:

historyApiFallback = require('connect-history-api-fallback') 

//start a local dev server 
gulp.task('connect', function() { 
    connect.server({ 
    root: ['dist'], 
    port: config.port, 
    base: config.devBaseUrl, 
    livereload: true, 
    middleware: [ historyApiFallback() ] 
    }); 
}); 
+0

原始問題指定「路由器在開發模式下像一個魅力。」。你的回答只能提供'devServer'和'devBaseUrl'(又名「開發模式」)。請不要瀏覽問題,只需從其他主題進行復制和粘貼,請花點時間瞭解相關問題並做出相應迴應。 – JeanLescure