1

不知道这里发生了什么。我已经设置了路由,当我转到我的第一页 localhost:8080/ 时,第一条路由按预期呈现。但是,如果我在 localhost:8080/store 中输入 url,则预期的路由会失败,并且我收到 404 找不到(甚至不会回退到我未找到的组件)。

但是,如果我设置一个链接并单击该链接,它将按预期呈现我的商店路线。

不应该/store呈现我的 StorePicker 组件,无论它是输入到 URL 中还是通过链接到元素选择?

应用程序.js

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

//Components
import StorePicker from './components/StorePicker.js';
import Main from './components/Main';
import NotFound from './components/NotFound';

const Routes = () => {
    return (
        <Router>
            <div>
                <Link to="/store">Store</Link>

                <Switch>
                    <Route path="/" exact component={StorePicker} />
                    <Route path="/store" component={Main} />
                    <Route component={NotFound} />
                </Switch>
            </div>

        </Router>
    )
}

render(<Routes />, document.querySelector('#container')); 
4

1 回答 1

0

假设您正在使用 Webpack。如果是这样,在你的 webpack 配置中添加一些东西应该可以解决这个问题。具体来说,output.publicPath = '/'devServer.historyApiFallback = true

var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  entry: './app/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'index_bundle.js',
    publicPath: '/'
  },
  module: {
    rules: [
      { test: /\.(js)$/, use: 'babel-loader' },
      { test: /\.css$/, use: [ 'style-loader', 'css-loader' ]}
    ]
  },
  devServer: {
    historyApiFallback: true,
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: 'app/index.html'
    })
  ]
};
于 2017-05-21T17:20:46.397 回答