我用React Router创建了以下内容。
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
class Main extends Component {
render() {
return (
<Router>
<Switch>
<Route exact path='/' component={Content} />
<Route path='/user/:id' component={User} />
<Route path='*' component={NotFound} />
</Switch>
</Router>
);
}
export default Main
如果URL无效,我想打开“未找到”页面。
我尝试打开localhost:3000/err
,但是它不会转到NotFound组件。
我找不到的组件很简单。
import React from 'react';
const NotFound = () => (
<h2>404 Page Not Found</h2>
);
export default NotFound;
我正在使用"react-router-dom": "^4.3.1
答案 0 :(得分:0)
为了使客户端路由起作用,服务器需要始终为所有路由返回相同的index.html。
因此,localhost:3000/err
需要使用客户端路由器javascript返回您的index.html。
答案 1 :(得分:0)
您是否尝试过使用重定向?我在我的应用程序中使用了它,效果很好。这是更新的代码供您参考-
import {Route, Switch, Redirect } from 'react-router-dom';
class Main extends Component {
render() {
return (
<Switch>
<Route exact path='/' component={Content} />
<Route path='/user/:id' component={User} />
<Route path="/not-found" render={props => <NotFoundPage />} />
<Redirect to="not-found" />
</Switch>
);
}
export default Main
将您的应用封闭在BrowserRouter内。
import React from 'react'
import ReactDOM from 'react-dom'
import { BrowserRouter } from 'react-router-dom'
import { Provider } from 'react-redux'
import { createStore } from 'redux'
import App from './components/app.js'
import styles from './styles/style.css'
import { store } from './stores/store'
ReactDOM.render((
<Provider store={store}>
<BrowserRouter>
<App />
</BrowserRouter>
</Provider>
), document.getElementById('root'))
让我知道这是否有帮助。
答案 2 :(得分:0)
最后我通过以下解决方法解决了
在我的webpack配置文件中,我添加了以下内容:
output: {
publicPath: '/'
},
devServer: {\
historyApiFallback: true
}
答案 3 :(得分:0)
"react-router-dom": "^5.1.2",
<Router history={history}>
<Switch>
<Route exact path={[routes.user.details]} component={UserProfile} />
<Route exact path={[routes.category.collection]} component={CategoryCollection} />
<Route exact path={[routes.category.details]} component={CategoryDetails} />
<Route exact path={[routes.product.collection]} component={ProductCollection} />
<Route exact path={[routes.product.details]} component={ProductDetails} />
<Route exact path={routes.auth.login} component={Login} />
<Route exact path={routes.auth.register} component={Register} />
<Route exact path={routes.auth.resetPassword} component={ResetPassword} />
<Route
path="*"
component={() => {
if (user.id) {
return <Redirect to={routes.user.details} />;
}
return <Redirect to={routes.auth.login} />;
}}
/>
</Switch>
</Router>