1 問(wèn)題描述
react-router-dom 配置路由后,瀏覽器直接輸入http://localhost:8080/list 頁(yè)面提示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 嘗試過(guò)辦法
嘗試了將root.js改成這個(gè):但是沒(méi)有根本上解決我的問(wèn)題:
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)槟愕暮蠖藳](méi)有 http://localhost:8080/list 這個(gè)路由 在地址欄直接鍵入地址是相當(dāng)于向后端發(fā)出一個(gè)get請(qǐng)求嘛, 后端只有 http://localhost:8080 這個(gè)對(duì)應(yīng)的就是你的單頁(yè)文件 index.html 其他的路由都是你前端寫(xiě)的。
看你用了react-router的switch,好奇就搜了下發(fā)現(xiàn)有人反饋這個(gè)問(wèn)題:http://blog.csdn.net/waterrin...
感覺(jué)跟你這個(gè) 可能是一個(gè)問(wèn)題建議你看下
另外我之前使用單頁(yè)面應(yīng)用在跳轉(zhuǎn)的時(shí)候用的外層都是Router里面是Route,感覺(jué)你這種用法好奇怪,
如果以上那個(gè)連接不能解決你的問(wèn)題,建議你回歸下react-router的基礎(chǔ)用法,不搞那么多花哨的,就簡(jiǎn)單的Router和Route跳轉(zhuǎn)調(diào)試下.
謝邀!
首先不建議您直接webpachk-dev-server --inline--hot這樣配置,命令方式不夠靈活,您更加體會(huì)不到webpachk-dev-server的魅力。
發(fā)生該問(wèn)題的原因是當(dāng)使用 BrowserRouter(HTML5 History API) 時(shí),您并沒(méi)有重寫(xiě)路由
。
解決辦法大致如下三種:
1、您可以將BrowserRouter更改成hashRouter,不過(guò)這樣鏈接會(huì)多一個(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...
希望對(duì)您有所幫助!
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。