2017-09-21 11 views
3

コンポーネント内の1つのイメージをクリックして、onClickに別のコンポーネントの同じイメージと情報を表示させることはできますか?私の心は空白を描いており、私は今かなり長い間答えを探してきました。画像をクリックすると他のコンポーネントに表示されますか?

複数の画像を表示するコンポーネントを作成しました。私はまた、最初のコンポーネントでクリックされたイメージに基づいてイメージとテキストを表示したい3つの別々のコンポーネントを作成しました。私は各画像のルーティングとコンポーネント作成を考えましたが、その方法は効率的ではないと感じました...

ありがとうございます!

これは主成分である:

import React from 'react'; 
import './app.css'; 
import ImageSection from './image_section'; 
import PaneOne from './pane_1'; 
import PaneTwo from './pane_2'; 
import PaneThree from './pane_3'; 


const App =() => (
    <div className="main_section"> 
     <div className="top_pane_area"> 
      <PaneOne /> 
      <PaneTwo /> 
      <PaneThree /> 
     </div> 
     <div className="bottom_image_area"> 
      <ImageSection /> 
     </div> 
    </div> 
); 

export default App; 

これは私が画像を希望すべての3つのコンポーネントを表示するものである(現時点では、3つのすべてのコンポーネントが同一である):

import React, { Component } from 'react'; 
import './app.css'; 


class PaneOne extends Component { 
    render() { 
     return (
      <div className="panes"> 

      </div> 
     ) 
    } 
} 

export default PaneOne; 

これは画像を含むコンポーネントです(現時点で):

import React, { Component } from 'react'; 
import './app.css'; 
import one from './imgs/one.jpg'; 
import two from './imgs/two.jpg'; 
import three from './imgs/three.jpg'; 
import four from './imgs/four.jpg'; 
import five from './imgs/five.jpg'; 
import six from './imgs/six.jpg'; 


class ImageSection extends Component { 
    render() { 
     return(
      <div> 
       <div> 
        <img className="prof_pic" src={one} /> 
        <img className="prof_pic" src={two} /> 
        <img className="prof_pic" src={three} /> 
        <img className="prof_pic" src={four} /> 
        <img className="prof_pic" src={five} /> 
        <img className="prof_pic" src={six} /> 
       </div> 
      </div> 
     ) 
    } 
} 

export default ImageSection; 
+0

これは間違いなく実行可能です。いくつかのコードを投稿できますか? – azium

+0

申し訳ありませんコードを追加するのを忘れました。それは今追加されました:) – t1m1t

答えて

1

tコンポーネントは、子コンポーネント(画像を持つコンポーネント)によって受け取られる関数を送信し、画像をクリックすることによって関数上の親に情報を返します。これにより、子供たちはコミュニケーションを親にすることができ、カスタムロジックのための追加パラメータを送信することもできます。親関数は、画像のclickイベントから中継される情報に応じて、任意のものをsetStateまたは任意のものにすることができます。

class App extends Component{ 
    constructor(props){ 
     super(props); 

     // set the state to handle which of the panes displays the information you want 

     this.image_clicked = this.image_clicked.bind(this); 
    } 

    render(){ 
     return (
      <div className="main_section"> 
       <div className="top_pane_area"> 
        <PaneOne /> 
        <PaneTwo /> 
        <PaneThree /> 
       </div> 
       <div className="bottom_image_area"> 
        <ImageSection image_clicked={this.image_clicked}/> 
       </div> 
      </div> 
     ) 
    } 

    image_clicked(source){ 
     // Based on the source or any additional parameter you send do any re-render logic 
     // example: 
     if (source == 'image1.png'){ 
      this.setState({pane1 : source}); 
     } 
    } 
} 

class ImageSection extends Component { 
    render() { 
     let image_clicked = this.props.image_clicked; 

     return(
      <div> 
       <div> 
        <img className="prof_pic" src={one} onClick={() => image_clicked(one)}/> 
       </div> 
      </div> 
     ) 
    } 
} 
+0

申し訳ありません、元の状態を設定するときに私は少し失われました。情報を表示するペインを処理するように状態を設定するとします。私はちょうど設定しますか this.state = {PaneOne = {イメージ: '""、名前: ""、説明: ""}} – t1m1t

+0

これはオプションかもしれません。あなたの状態には、それぞれのペインごとに3つの異なるオブジェクトがあり、クリックされたイメージに応じて、その特定のペインの状態を設定できます。ペイン番号のimage_clicked関数に追加のパラメータを送信して、どのPaneオブジェクトを変更するかを知ることもできます。 – romsearcher

+0

Appコンポーネントに状態を設定しますか?私は、次のようなアプリケーション・コンポーネントを設定した: 'this.state = { PaneOne:{ profile_img: ''、 名: ''、 説明: '' }、 PaneTwo:{ profile_imgました: ''、 名: ''、 説明: '' }、 PaneThree:{ profile_img: ''、 名: ''、 説明: '' }} this.image_clicked = this.image_clicked .bind(これ); } ' – t1m1t

関連する問題