2016-04-14 18 views
3

私は親コンポーネントを持っています:Previewerこれは2人の子供をレンダリングします。React.js:同じ親の2人の子供の間のコミュニケーション?

class Previewer extends Component { 
    render() { 
    return (
     <AudioPlayer /> 
     <SubtitleRow /> 
    ); 
    } 
} 

ユーザーがSubtitleRowをクリックすると、変数が渡されます。 startTimeEndTimeAudioPlayerとなり、オーディオを再生する必要があります。私はofficial documentationを読んだ

親子関係を持たない2つのコンポーネント間の通信のために、独自のグローバルイベント システムを設定することができます。 componentDidMount()のイベントに登録し、 componentWillUnmount()で登録を解除し、イベントを受け取ったときにsetState()を呼び出します。 フラックスパターンは、これを配置する方法の1つです。

私は、彼らが関係(兄弟)を持っていると思うので、その通信を実装するための他の方法はありますか?

グローバルイベントまたは変数は、JavaScriptによると、良いパーツまたは何かJavaScriptのデザインパターンに従ってはお勧めしません。

+0

関数を呼び出すことができます非常によく説明されている) - 兄弟関係を行うために、あなたはこれらを組み合わせて行うことができます。親コンポーネントにすべての論理/状態を保持させて子コンポーネントを調整し、必要なデータを小道具を介して子に渡し、イベントを親に渡します(コールバックを小道具として渡すことでこれを行うことができます)。このようにするのは、あなたのコンポーネントが自分自身とコントロールするコンポーネントだけを気にしているから、物事はうまく切り離されています。 –

+0

親コンポーネントと通信するためのコールバックを小道具として使用する例については、https://facebook.github.io/react/docs/tutorial.html#callbacks-as-propsを参照してください。 –

+0

私はreactjsに新しいですが、これは助けになるかもしれません。 ''そして次に 'someFunction:function(){this.setState({x:"/"})}' '' –

答えて

1

この状態を使用して、変数をAudioPlayerコンポーネントに渡すことができます。次に、あなたのSubtitleRowコンポーネントで、私は後者があるとは思わないが、あなたは(親子/親子関係について協議をリンクされたページthis.props.onClick(のstartTime、endTimeは)

class Previewer extends Component { 
constructor() { 
    this.state = { 'startTime': 0, 'endTime' : 0 }; 
    this.handleClick= this.handleClick.bind(this); 
} 

handleClick(startTime, endTime) { 
    this.setState({ 
    'startTime': startTime, 
    'endTime': endTime 
    }); 
} 

    render() { 
    return (
     <AudioPlayer startTime="{this.state.startTime}" endTime="{this.state.endTime}"/> 
     <SubtitleRow onClick="{this.handleClick}" /> 
    ); 
    } 
} 
+0

しかし、彼はSubtitleRowからどのように開始と終了を得ますか? – JordanHendrix

+0

SubtitleRowコンポーネントでthis.props.onClick(startTime、endTime)を呼び出すと、親コンポーネント(Previewer)のhandleClick関数が呼び出され、状態が更新され、オーディオプレーヤーが再レンダリングされます新しいstartTimeとendTime –

関連する問題