javascript - React router v4 无法构建

标签 javascript reactjs react-router react-router-v4 react-router-dom

我在生产环境中遇到 react-router-dom 的问题。虽然我的应用程序页眉和页脚呈现得很好,但路由器不工作,我可以在检查 Chrome devtools 中的 html 时看到我的路由应该出现的以下注释。我没有收到任何控制台错误。

<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 是推荐的方法。

最佳答案

在 httacces 文件中使用以下代码

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

如果您的应用不在根文件夹中,则使用

<BrowserRouter basename="/the-app">

**还有更多评论检查链接 https://www.andreasreiterer.at/fix-browserrouter-on-apache/

关于javascript - React router v4 无法构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43351736/

相关文章:

javascript - 如果只有一张幻灯片,请禁用 bxSlider

javascript - enzyme 测试同一组件内的多种渲染方法

reactjs - react 路由器POP

reactjs - 如何通过 react 恢复后退按钮的状态

reactjs - 后退按钮在 React 中显示空白页面

javascript - 如何实现按住按钮 javascript?

javascript - 如何在ajax成功中中断执行并显示错误?

javascript - 如何制作与 960.gs 或其他网格框架对齐的可拖动 DIV?

javascript - 使用 es6 spread 而不使用 Object.assign

javascript - 最佳实践 : react components on mobile version of site