2017-02-02 6 views
0

こんにちは私はthis.props.nameに基づいて表示しているスライドのリストを持っています。 私はすべてのスライドをマッピング配列にリストアップしておき、コンテナコンポーネントのボタンを押すことに基づいてもう一方を置き換えてレンダリングしたいと思います。私はコンポーネントをレンダリングするだけで問題があります。マッピングからReact Componentを返すにはどうしたらいいですか?

SlideTestコンポーネントは、Slide1、Slide2、Slide3などの適切な名前で適切にバインドされます。この名前を使用してコンポーネントをレンダリングします。 Slide1のようなものだけを返すことができます。これは私が理想的に望むものではありません。ここ

export const mapping = { Slide1, Slide2, Slide3, Slide4 } 

ここマッピング

import React, { Component, PropTypes } from 'react' 
import sass from '../scss/application.scss' 
import { mapping } from './AllSlides' 


class SlideContainer extends Component { 
    constructor(props){ 
     super(props) 
      this.state = { 
       name: '', 
      } 
    } 

    render() { 

     const curSlide =() => { 
      console.log(mapping[this.props.name]); 
      return mapping[this.props.name]; 
     } 

     return(
      <div> 
       <center> 
        {curSlide()} 
       </center> 
      </div> 
     ) 
    } 
} 

SlideContainer.propTypes = { 
    name: PropTypes.string 
} 

export default SlideContainer; 

を使用してコンポーネントである外側コンテナにボタンのhandleClick関数です。

handleClick(e) { 
     e.preventDefault(); 
     let tempCount = this.state.count + 1; 
     let curSlide = `Slide${tempCount}`; 

     this.setState({ 
      name: curSlide, 
      count: tempCount 
     }); 
    } 

答えて

0

レンダリング情報をスライドコンポーネントに渡します。または、新しいスライドをレンダリングするためにSlideContainerにスライド小道具を渡す方が良い。スライドアニメーションが必要な場合はReactCSSTransitionGroupをチェックしてください。

render() { 
    const Slide1 = {slide: 'slide1', src: 'url1'} 
    const Slide2 = {slide: 'slide2', src: 'url2'} 
    const Slide3 = {slide: 'slide3', src: 'url3'} 
    const Slide4 = {slide: 'slide4', src: 'url4'} 

    const mapping = { Slide1, Slide2, Slide3, Slide4 }; 
    const slide = mapping['Slide2']; //or this.props.name 

    return(
     <div> 
      <center> 
       <Slide name={slide.slide} url={slide.url}/> 
      </center> 
     </div> 
    ) 
} 
+0

私はそれを巨大なif else文と一緒に使っています。素敵なトランジションを作成するCSSをたくさん追加しました。リアクタとリンクを使ってこれを構築した方がいいでしょう。しかし、私は、レンダリングされるComponentを返す方法が見つからないとは思わない。実際に反応しているコンポーネントを返すだけですか?もし私がcomponentWillMountのライフサイクルを追加すると、私はそれを動作させることができます – user3622460

関連する問題