我第一次使用react-router,我的项目有点问题。 React-router正在改变url,但是我的图像没有被加载。我认为这是因为基本网址会发生变化,例如它在链接时会起作用:http://localhost:3000/f0287893b2bcc6566ac48aa6102cd3b1.png
但它不是这样的http://localhost:3000/module/f0287893b2bcc6566ac48aa6102cd3b1.png
。这是我的路由器代码:
import { Router, Route, browserHistory, IndexRoute } from 'react-router'
import { syncHistoryWithStore } from 'react-router-redux'
import { Provider } from 'react-redux'
import ReactDOM from 'react-dom'
import React from 'react'
import App from './containers/App'
import configure from './store'
import Home from './components/home';
import Module from './components/module-page/module';
import Login from './components/login/login';
const store = configure();
const history = syncHistoryWithStore(browserHistory, store);
ReactDOM.render(
<Provider store={store}>
<Router history={history}>
<Route path="/" component={App}>
<IndexRoute component={Login} />
<Router path="/home" component={Home}/>
<Router path="/module(/:module)" component={Module}/>
</Route>
</Router>
</Provider>,
document.getElementById('root')
)
这是触发链接的地方:
import React, { Component } from 'react';
import { ROUTE_MODULE } from '../../constants/Routes';
import { Link } from 'react-router';
import styles from './side-bar-items.css';
import { Navbar, Nav, NavItem, Collapse } from 'react-bootstrap/lib'
import FontAwesome from 'react-fontawesome';
class SideBarItems extends Component {
constructor(prop) {
super(prop);
this.state = { open: false };
}
render() {
return (
<Navbar.Collapse>
<Nav>
<NavItem className={styles.navItem} eventKey={1}>
<FontAwesome className={styles.navItemIcon} name='globe' size="lg"/>
<span className={styles.navItemIconText}>Dashboard</span>
</NavItem>
<NavItem onClick={this.showModules} className={`${styles.navItem} ${styles.itemModule}`}>
<FontAwesome className={styles.navItemIcon} name='clone' size="lg"/>
<span className={styles.navItemIconText}>Modules</span>
<Collapse in={this.state.open}>
<div className={styles.collapse}>
<div className={styles.module}>
<Link to="/module/moduleCode=2999">Programming III</Link>
</div>
</div>
</Collapse>
</NavItem>
</Nav>
</Navbar.Collapse>
)
}
showModules = () => {
this.setState({ open: !this.state.open })
}
}
export default (SideBarItems);
这是我导入图片的地方:
导入React,{Component}来自&#39;反应&#39 ;; 从&#39; react-bootstrap / lib / Image&#39;中导入图片 从&#39; ../../ images / avatar.jpg&#39;中导入头像; 从&#39; ./ user-image.css&#39;;
导入样式 class UserImage extends Component {
render() {
return (
<div className={styles.userContainer}>
<Image className={styles.avatar} src={avatar} rounded />
<span className={styles.userName}>Hello, Daniel</span>
<span className={styles.userCourse}>SEC, Software Engineering</span>
</div>
)
}
}
export default (UserImage);
这是我点击链接时网站的外观
答案 0 :(得分:9)
要确保图片来自服务器的根目录而不是当前路线的相对目录,请在/
前面添加src
:
<Image className={styles.avatar} src={`/${avatar}`} rounded />
答案 1 :(得分:4)
对我有用的是将HTML基本引用设置为Web根目录
<head>
<base href="/">
</head>
这也解决了路由器在预定路径刷新页面时的一些其他问题。
答案 2 :(得分:1)
也许你可以在你的html文件中设置基本元素。
<base href="http://www.example.com/page.html">
答案 3 :(得分:0)
您应该在public / index.html中添加,以便可以从基本服务器而不是相对路径中加载图像。