2016-10-16 10 views
1

ちょっとした文脈を提供し、私の質問をより明確にするために、私はうまくいくシナリオを提示し、意味をなさないでしょう。「コマンド」をリアクションコンポーネントに送信しますか?

再生、停止、およびシークのコントロールをレンダリングするAudioTrackコンポーネントがあるとします。ユーザーが求めている場合は、その情報は私達に戻って渡されます。

<AudioTrack playingId={this.state.playingId} onSeek={this.handleSeek} /> 

しかし、どのような(playingIdは、現在再生中のトラックのIDを示す)私たちは、オーディオトラックの外にシーク制御を移動し、そうであればシークコントロールは親の<TrackList>に存在し、現在再生中のトラックを制御します。今、私は例えば、適切なトラックにデータを「コマンドを送信」する必要があります。

<AudioTrack playingId={this.state.playingId} seekTo={this.state.newPos} onSeek={this.seekComplete} /> 

これは私にはハックに感じますが、ユーザーがシークバーの行くことができます基本的にするとき、それはでnewPos状態を設定しますTrackListは、AudioTrackcomponentWillReceivePropsをトリガします。それは新しい位置を探して、onSeek経由で報告することができ、this.setState({ newPos: null })TrackListになります。

これについて正しく考えているのですか、それとも良い方法がありますか?理想的な世界では、私はただ直接AudioTrackのメソッドを呼び出すことができます。

答えて

-2

これらの種類のものには、リフィックスまたはフラックスを使用する必要があります。反応を扱うときは、すべてのコンポーネントを還元/フラックスストアに保存する必要があります。実際にコンストラクタ(小道具)を使用せず、すべてをストアに格納するべきです。これは、あなたの 'ハッキー'問題を修正します。あなたはあなたが探しているものであるあなたのreduxストアに直接電話をかけることができます。

私はreduxと反応することの重要性をもっと詳しく知ることはできません。それらを一緒に使用する必要があります。

https://github.com/reactjs/redux

+1

Reduxのは絶対に必要ではなく、多くの場合、それは実際に過剰に使用されて巻き上げます。私は通常はコメントしませんが、絶対初心者は「一緒に使う必要があります」と読んでほしくないと思っていました。 – ffxsam

+3

これはちょうど真実ではありません。 Redux/etcを使用しても、Reduxストアにすべての状態を保持する必要があることは間違いありません。例えば、UI状態はRedux(例えば、http://redux.js.org/docs/faq/OrganizingState.html#organizing-state-only-redux-state)と正規のhttps://媒体に属していないかもしれません。 com/@dan_abramov/you-might-not-need-redux-be46360cf367#.hud5vjfhj Reduxを使用してかなり楽しんでいることに注意してください。特に、私は必要なコンポーネントにUIの状態を保持しています。 –

関連する問題