【发布时间】:2017-08-06 09:51:31
【问题描述】:
我正在使用 BrowserRouter 的反应,我想通过它在页面之间导航。最初,一个页面中有四个图像,单击一个图像后,图像会在屏幕中打开。该图像下方有一个后退按钮,可将用户导航回带有四个图像的第一个屏幕。
代码是这样的
App.js
import React from 'react';
import ReactDOM from 'react-dom';
import $ from 'jquery';
import {FirstPage} from './FirstPage.js';
import {BrowserRouter,Route,Router} from 'react-router-dom';
class App extends React.Component{
constructor(props){
super(props);
}
render(){
return(
<div>
<BrowserRouter>
<Route path="/" component={FirstPage}><FirstPage/></Route>
</BrowserRouter>
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById('container'));
FirstPage.js
class FirstPage extends React.Component{
constructor(props){
super(props);
this.state={
list:[],
images:[],
isClicked:false
}
this.loadImages=this.loadImages.bind(this);
this.loadOne=this.loadOne.bind(this);
}
componentDidMount(){
window.addEventListener('load',this.loadImages);
}
loadImages(){
console.log("load");
var that=this;
$.ajax({
type:'GET',
url:'https://demo0813639.mockable.io/getPanos',
datatype:'jsonp',
success:function(result){
var images=that.state.images;
for(var i=0;i<result.length;i++){
that.state.images.push({"pano":result[i].pano,"name":result[i].name});
}
that.setState({
images:images
})
}
})
}
loadOne(pano){
this.setState({
isClicked:true,
imageUrl:pano
})
}
render(){
var list=this.state.list;
if(this.state.isClicked===false){
list=this.state.images.map((result)=>{
//console.log(result.name);
return(<div className="box">
<div className="label">{result.name}</div>
<img src={result.pano} className="image col-md-3" onClick={this.loadOne.bind(this,result.pano)}/>
</div>
)
})
}
else{
list.push(<Panorama imageUrl={this.state.imageUrl}/>)
}
return <div>{list}</div>;
}
}
module.exports={
FirstPage:FirstPage
}
全景.js
import 'aframe';
import 'aframe-particle-system-component';
import {Entity, Scene} from 'aframe-react';
import {Link} from 'react-router-dom';
class Panorama extends React.Component{
render(){
return(
<div>
<div className="pano">
<Scene>
<a-assets position="5 5 5">
<img id="myImage" src={this.props.imageUrl} crossorigin="anonymous"/>
</a-assets>
<a-sky src="#myImage"></a-sky>
</Scene>
</div>
<div className="goback"><Link to="/">Go back</Link></div>
</div>
)
}
}
module.exports={
Panorama:Panorama
}
上面的代码没有任何错误,但它也不起作用。反应路由器的版本是v4。上面有什么问题?
【问题讨论】:
-
我不相信 Route 组件应该像 "
" 那样在其中包含 FirstPage 组件,而是像 -
同样,它也不起作用@Dream_Cap
-
另外我注意到你直接推送到图像的状态,我认为这在 React 中是一种不好的做法。也许尝试在变量中声明一个数组,然后用数组设置状态?
-
是的,这是一个很好的建议,我会这样做
标签: javascript reactjs react-router react-router-v4 react-router-dom