【问题标题】:React router can't find page after page refresh [duplicate]页面刷新后反应路由器找不到页面[重复]
【发布时间】:2018-02-15 02:48:11
【问题描述】:

我的应用程序正在显示书籍列表,其中包含指向该书详细信息页面的链接。

当我在呈现图书列表的主组件上并单击链接以访问特定图书时,页面正在正确加载...

但是当我刷新页面时,出现 404 - Page not found 错误

(我正在使用 react-router v4、Node v6.11.1、Express v4.15.2)

React 路由器设置:

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

class App extends Component {
    render() {
        return (
            <div>
                <MyNavbar/>
                <div style={{paddingTop: "5rem"}}>
                    <Switch>
                        <Route exact path='/' component={Home}/>
                        <Route path='/book/:id' component={BookPage}/>
                    </Switch>
                </div>
            </div>
        )
    }
}

ReactDOM.render((
    <Router>
        <App />
    </Router>
), document.getElementById('root'))

这是我的 webpack 配置:

var webpack = require('webpack')
var path = require('path')

module.exports = {
    entry: {
        app: './src/app.js'
    },
    output: {
        filename: 'public/dist/bundle.js',
        sourceMapFilename: 'public/dist/bundle.map.js'
    },
    devtool: '#source-map',
    module: {
        loaders: [
            {
                loader: 'babel-loader',
                test: /\.js?$/,
                exclude: /(node_modules)/,
                query: {
                    presets: ['react', 'es2015']
                }
            }, {
                test: /\.css$/,
                loader: "style-loader!css-loader"
            },
            {
                test: /\.scss$/,
                use: [
                    'style-loader',
                    'css-loader',
                    { loader: 'sass-loader', options: { sourceMap: true } }
                ]
            },
            {
                test: /\.(png|jpg|)$/,
                loader: 'url-loader?limit=200000&name=./imgs/[hash].[ext]'
            }
        ]
    },
}

【问题讨论】:

  • 我猜你用的是browserRouter,是吗?
  • 关于您正在使用的服务器的一些消息?
  • 是的@ShubhamKhatri
  • 我没有使用 webpack-dev-server 而是 nodemon,这可能是问题吗? @ShubhamKhatri
  • 你在用 webpack 吗???请阅读此stackoverflow.com/questions/27928372/…

标签: javascript node.js reactjs routing react-router


【解决方案1】:

这是doc~

如果你使用webpack-dev-server

  1. 如果您在webpack.config.js 上编写webpack-dev-server 配置

    您应该在 webpack 配置中将此 historyApiFallback: true 添加到 devServer

    这将在 404 时返回 index.html。

    devServer: { ... historyApiFallback: true }

  2. 如果您只使用cli,请执行此操作

    webpack-dev-server --history-api-fallback

  3. 如果你使用节点快递server.js,见here

如果是生产,你可以编辑服务器配置,发出每个请求,返回 index.html,当然,排除静态文件和 api 请求~

对不起。我在手机上写的。

【讨论】:

  • 我不太明白你所说的“让每个请求都返回 index.html”是什么意思。我需要显示 BoolPage 而不是 Home 组件
  • @JesterWest 你一定知道,这是单页应用。路由改变,页面改变,它只由js操作,而不是服务器。所以,当你第一次请求页面(或刷新)时,服务器会给你 index.html,接下来你只能通过 js 更改页面.. 所以,无论你需要哪个页面,index.html 和 js 都会给你~
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 2019-02-15
  • 2017-08-13
  • 1970-01-01
  • 2021-04-05
  • 2021-07-20
  • 2020-07-11
相关资源
最近更新 更多