2016-03-18 19 views
3

最近Reactの学習を開始しましたが、ウィザードコンポーネントを作成しようとしています。 は、もともと私はそれがこのように使用することができることを描いた:Reactでウィザードコンポーネントを作成する最善の方法

<Wizard isVisible={this.state.isWizardVisible}> 
    <Page1 /> 
    <Page2 /> 
</Wizard> 

私はプロパティ、子供(ページ1、ページ2)への偶数成分を抽出したいとき(まだOOPの考え方を持つ)問題に走り始めましたウィザードの設定/上書き(タイトル、フッターコンポーネントなど)。

これはもちろん、Wizard.renderではコンポーネント自体にアクセスできないため、これは実行できません。

次に、私はthisウィザードを使ってrepoを見つけました。レポ内のコンポーネントは、ウィザードの現在のステップを設定するjavascriptオブジェクトであり、Reactコンポーネントを返すコンポーネントプロパティを含むStepsの配列で構成されます。

このアプローチは確かに問題を解決しますが、別の方法で実行できるかどうか、または各ページ/ステップコンポーネントが動作をカプセル化し、他のものをカプセル化しないように、途中で(レポのように)。

答えて

3

これを解決する「リアクション」の方法は、アプリケーション全体の状態をコンポーネント階層の最上部に保つことです。もちろんReactは本質的にMVCのVであり、データや状態ロジックをどのように管理するかについては敬遠されません。しかし、あなたが達成したいことは、このようなものです:

<Wizard isVisible={this.state.isWizardVisible}> 
    <GenericPage foo={something} bar={somethingElse} /> 
</Wizard> 

このロジックによって、ウィザードはあなたが提供する、とGenericPageは、現在のページをレンダリングする必要があるものは何でも伝承したいすべてのアプリケーションの状態にアクセスすることができます。状態を変更できるようにGenericPageコンポーネントが必要な場合は、関数を小道具としても渡します。

アプリケーション状態の変更を処理する一般的な方法を実装するフレームワークがいくつかあります。 FacebookにはFluxがありますが、Reduxはすべての右ボタンを押しているようで、選択の枠組みです。

+0

答えをありがとう。私は、親にすべての情報を持ってもらうという考えを得るが、私の場合、現在のページに基づいて親のタイトルに影響を与えたい。私はこれがその哲学に反する情報の流れを逆転させるだろうが、現時点では解決策を見ていないことを知っている – user1294431

+0

本当にする必要がある場合は、親/祖先コンポーネントのローカル状態を使用して値を保存します。また、親/祖先コンポーネントには、この状態を変更する関数があります。この関数を子どもの小道具として渡し、必要に応じて呼び出すだけです。もう一つ、このパターンを最小限に抑えて、いくつかの頭痛を軽減してください: ''。 ChildからCustomComponentへのレンダー機能のレンダリングを活用することは、長期的にはより簡潔なアプローチです。 – dannyjolie

+0

これは私の言うことを説明する助けになるかもしれません:https://jsfiddle.net/dannyjolie/627ofoqo/これは、非常に単純化された通常のデータフローパターンです。すべてのコンポーネントはアプリ内のすべてのものにアクセスできる可能性があります。どこからでも何かを変更する必要がある場合は、changeStore()を呼び出してください。 – dannyjolie

1

あなたはとの小道具をmemoizing試すことができます。

https://github.com/gilbox/react-derive

、あなたはページ2コンポーネントへのPage1から小道具を渡すことができます。

+0

これはうまくいくかもしれませんが、クイックスキャンでは頭が少し上です。私はもう少し詳しくそれを研究する必要があります。 – user1294431

関連する問題