【发布时间】:2018-08-16 20:53:12
【问题描述】:
我在下面的课程中有以下路线:
import { Router, Route } from 'react-router-dom';
class App extends React.Component {
constructor(props) {
super(props);
}
render() {
const { alert } = this.props;
return (
<Router history={history}>
<div>
<Route path="/login" component={LoginPage} />
<Route path="/administrate" component={AdministratePage} />
<Route exact path='/' component={LoginPage} />
</div>
</Router>
);
}
}
对于http://localhost:12345/,登录组件正确显示。
但是,当我在浏览器中输入 http://localhost:12345/login 或 http://localhost:12345/administrate 时,我得到了 404。
在导航器中输入“http://localhost:12345/administrate”会得到 404,但如果我输入:
this.props.history.push('/administrate');
在登录组件的渲染方法中,它正确重定向,显示管理组件。
怎么会?我的 F12 控制台中没有错误。非常感谢。
我的 webpack.config.js:
module.exports = {
devServer: {
historyApiFallback: true
},
context: __dirname,
entry: "./index.js",
output: {
path: __dirname + "/dist",
filename: "bundle.js" // naam van de file die je genereert. die bundle.js include je in je cshtml. Wordt voortdurend geupdate als je programmeert
},
resolve: {
extensions: ['.js', '.jsx']
},
watch: true, // dan hoef je niet telkens npm run webpack te draaien, je ziet dan in je cmd 'webpack is watching the files'
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['babel-preset-env', 'babel-preset-react'], // deze heb je met npm geinstalleerd
plugins: ["transform-object-rest-spread"] // voor het gebruik van de spread operator
}
}
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{ // Werkt niet
test: /\.jsx$/, loader: 'babel-loader', exclude: '/node_modules/'
}
]
}
};
index.js:
import { store } from './_helpers';
import { App } from './App';
render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root')
);
历史:
import { History } from './index'; // history 4.6.2
import { getConfirmation } from './DOMUtils';
export interface BrowserHistoryBuildOptions {
basename?: string;
forceRefresh?: boolean;
getUserConfirmation?: typeof getConfirmation;
keyLength?: number;
}
export default function createBrowserHistory(options?: BrowserHistoryBuildOptions): History;
【问题讨论】:
-
@Chris 我已经做到了 - 运气不好。
-
您是否使用 create-react-app 引导此应用程序?
-
@ChaimFriedman no.
-
在这种情况下,我们可能还需要查看您的 webpack 配置和 index.html。如果您自己为 index.html 提供服务(而不是使用 webpack-dev-server),那么看到这一点也会有所帮助
-
尝试将BrowserRouter导入为Router
import { BrowserRouter as Router, Route } from "react-router-dom";