1

私は4つの画像を表示するコードを持っており、1つの画像をクリックすると画面全体を占めています。私は反応ルータを使って同じものを実装しています。 コードはこれで反応ルータ経由のパラメータを渡す

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import $ from 'jquery'; 
import {FirstPage} from './FirstPage.js'; 
import {Panorama} from './Panorama.js'; 
import {BrowserRouter,Route,Router,Switch} from 'react-router-dom'; 

class App extends React.Component{ 
    constructor(props){ 
     super(props); 
    } 

    render(){ 
     return(
     <div> 
      <BrowserRouter> 
      <Switch> 
       <Route path="/" component={FirstPage} /> 
       <Route path="/image/:id" component={Panorama} /> 
      </Switch> 
      </BrowserRouter> 
     </div> 
     ) 
    } 
    } 

ReactDOM.render(<App/>,document.getElementById('container')); 

FirstPage.js

import React from 'react'; 
import ReactDom from 'react-dom' ; 
import $ from 'jquery' ; 
import {Panorama} from './Panorama.js'; 
import {Redirect} from 'react-router-dom'; 

class FirstPage extends React.Component{ 
    constructor(props){ 
     super(props); 
     this.state={ 
     list:[], 
     images:[], 
     isClicked:false, 
     redirect:true 
     } 
     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; 

    return this.state.isClicked?<Redirect to={'/image/${this.state.imageUrl}'}/>: 
     <div> {this.state.images.map((result)=>{ 
     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> 
      ) 

     })} 
     </div> 
    } 
} 

module.exports={ 
    FirstPage:FirstPage 
} 

Panorama.js

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import $ from 'jquery'; 
import {Link} from 'react-router-dom'; 

class Panorama extends React.Component{ 
    render(){ 
     return( 
     <div> 
     <div className="pano"> 
       <img id="myImage" src={props.match.params.id} /> 

      <div className="goback"><Link to="/">Go back</Link></div> 
      </div> 
     ) 
    } 
    } 

module.exports={ 
    Panorama:Panorama 
} 

この App.jsのようなものであるURLは、この

のようなものになり

http://localhost:8080/image/ $%7Bthis.state.imageUrl%7D

、screen.Withこの上に来る画像と何もクリックした後

リダイレクトへ= {{パス名= '/画像' params:{this.state.imageUrl}}}

私は構文エラーを取得

これを行うための正しい方法は何ですか?

答えて

2

to小道内の文字列を生成するためにバックティックの代わりにシングルクォートを使用しているようです。

はに

<Redirect to={'/image/${this.state.imageUrl}'}/> 

を変更してみてください:

<Redirect to={`/image/${this.state.imageUrl}`}/> 
+0

それが働いたおかげ – Aayushi

2

あなたはreact-router 3を使用している私は、リダイレクトを開始するthis.context.router.push()で、react-router 3が提供するリダイレクト機能を使用することをお勧めいたします。成分中

サンプルコード:

class FirstPage extends React.Component{ 
constructor(context) 
{ 
    super(context) 
} 
... 
} 
FirstPage.contextTypes = { 
    router: PropTypes.object.isRequired 
} 

反応ルータ3のサンプルリダイレクトアクション:反応ルータ4に

this.context.router.push({ pathname: `/image${this.state.imageUrl}`}) 

をサンプルリダイレクトアクション:

this.context.router.history.push({ pathname: `/image${this.state.imageUrl}`}) 
+0

いいえReact v4を使用しています – Aayushi

関連する問題