1 問題描述
react-router-dom 配置路由后,瀏覽器直接輸入http://localhost:8080/list 頁面提示Cannot GET /users。Console提示——:8080/users:1 GET http://localhost:8080/users 404 (Not Found)。
2 相關(guān)代碼
我的代碼路徑如下:
相關(guān)代碼如下
package.json:
{
"name": "07-01",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-plugin-react-html-attrs": "^2.1.0",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.7",
"prop-types": "^15.6.0",
"react": "^16.1.1",
"react-dom": "^16.1.1",
"react-mixin": "^2.0.2",
"style-loader": "^0.19.0",
"webpack": "^3.8.1",
"webpack-dev-server": "^2.9.4"
},
"dependencies": {
"antd": "^3.0.0",
"react-router": "^4.2.0",
"react-router-dom": "^4.2.2"
}
}
webpack.config.js:
var webpack = require('webpack');
var path = require('path');
module.exports = {
context: path.resolve(__dirname, "src"),
entry: './js/root.js',
module: {
rules: [
{
test: /\.js$/,
exclude: path.resolve(__dirname, "node_modules"),
include: path.resolve(__dirname, "src"),
use: {
loader: 'babel-loader',
options: {
presets: ['env','react'],
plugins: ['react-html-attrs']
}
}
},
//下面使用ant-design 的配置文件
{
test: /\.css$/,
use: [
'style-loader', {
loader: 'css-loader'
}
]
}
]
},
output: {
path: path.resolve(__dirname, "src"),
publicPath: "/src/",
filename: 'bundle.js'
}
};
index.js:
var React = require('react');
var ReactDom = require('react-dom');
import ComponentHeader from './components/header';
import ComponentFooter from './components/footer';
import BodyIndex from './components/bodyindex';
export default class Index extends React.Component {
render() {
var component = <ComponentHeader/>;
return (<div>
{component}
<ComponentFooter/>
</div>)
}
}
root.js
import React from 'react';
import ReactDOM from 'react-dom';
import Index from './index';
import ComponentList from './components/list'
import {BrowserRouter, Route, Link} from 'react-router-dom';
import {Router, Switch} from 'react-router';
export default class Root extends React.Component {
render() {
return (
<BrowserRouter>
<Switch>
<Route exact path="/" component={Index}/>
<Route path="/list" component={ComponentList} />
</Switch>
</BrowserRouter>)
};
}
ReactDOM.render(<Root/>, document.getElementById('examples'));
list.js
import React from 'react'
export default class ComponentList extends React.Component {
render() {
return(
<div>我是鏈接</div>
)
}
}
index.html
<head>
<link rel="stylesheet" href="./src/css/style.css" />
</head>
<div id="examples">123</div>
<script src="./src/bundle.js"></script>
3 報(bào)錯(cuò)信息
正常的:
報(bào)錯(cuò)的:
4 嘗試過辦法
嘗試了將root.js改成這個(gè):但是沒有根本上解決我的問題:
import React from 'react';
import ReactDOM from 'react-dom';
import Index from './index';
import ComponentList from './components/list'
import {BrowserRouter, Route, Link} from 'react-router-dom';
import {Router, Switch} from 'react-router';
export default class Root extends React.Component {
render() {
return (
<BrowserRouter>
<div>
<Link to="/">Index</Link>
<Link to = "/list" > ComponentList</Link>
<Switch>
<Route exact path="/" component={Index}/>
<Route path="/list" component={ComponentList} />
</Switch>
</div>
</BrowserRouter>)
};
}
ReactDOM.render(<Root/>, document.getElementById('examples'));
因?yàn)槟愕暮蠖藳]有 http://localhost:8080/list 這個(gè)路由 在地址欄直接鍵入地址是相當(dāng)于向后端發(fā)出一個(gè)get請求嘛, 后端只有 http://localhost:8080 這個(gè)對應(yīng)的就是你的單頁文件 index.html 其他的路由都是你前端寫的。
看你用了react-router的switch,好奇就搜了下發(fā)現(xiàn)有人反饋這個(gè)問題:http://blog.csdn.net/waterrin...
感覺跟你這個(gè) 可能是一個(gè)問題建議你看下
另外我之前使用單頁面應(yīng)用在跳轉(zhuǎn)的時(shí)候用的外層都是Router里面是Route,感覺你這種用法好奇怪,
如果以上那個(gè)連接不能解決你的問題,建議你回歸下react-router的基礎(chǔ)用法,不搞那么多花哨的,就簡單的Router和Route跳轉(zhuǎn)調(diào)試下.
謝邀!
首先不建議您直接webpachk-dev-server --inline--hot這樣配置,命令方式不夠靈活,您更加體會不到webpachk-dev-server的魅力。
發(fā)生該問題的原因是當(dāng)使用 BrowserRouter(HTML5 History API) 時(shí),您并沒有重寫路由。
解決辦法大致如下三種:
1、您可以將BrowserRouter更改成hashRouter,不過這樣鏈接會多一個(gè)#。
2、看您有引入webpack-dev-server,webpack-dev-server是一個(gè)小型的Node.js Express服務(wù)器,所以您可以直接用Express,Express配置如下,供參考:
參考鏈接我的github項(xiàng)目:https://github.com/sosout/rea...
3、如果您非用webpack-dev-server不可,webpack-dev-server配置如下:
我本地是引入的connect-history-api-fallback,您可以直接按照官方文檔,我這邊僅供參考:
官方文檔鏈接:https://doc.webpack-china.org...
希望對您有所幫助!
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。