私はそれを正しくすることができません。ここでは、私は2つのウィジェット、TabBarとTabNavigatorを作った。 tabNavには、インデックスcurrentSelectedTabの状態が含まれています。だから、TabBarがユーザのクリックを受け取ると、それは親(TabNav)に何か(コールバック付きで)するように通知します。親は、親愛なるタブバーを選択して、新しいタブを選択します:currentSelectedTab と同時に、 tabNavは、タブの適切なコンテンツを表示します。ReactJsの機能的スタイルがカプセル化を破る
これまでのところ良いです。しかし、今私はアプリケーションがTabNavを特定のタブに設定できるようにしたい。私が小道具としてそれを紹介するとすぐに、tabnavでcurrentSelectedTabのカプセル化が解除されます。アプリケーション内で定義する必要があります。そして、これは吸う。
OOPパースペクティブでは、TabNavウィジェットにsetCurrentTabがありますが、FPでは、特にReactではこれが禁止されています。ウィジェットの唯一のエントリードアは小道具です。 (Refsは悪いですよね?)
これは、TabBarがユーザークリックを受け取ると、TabNavでコールバックを呼び出し、TabNavはアプリケーションで定義された上位コールバックを呼び出す必要があることを意味します。このコールバックによってアプリケーションの状態が変更され、currentSelectedTabが設定されます。そのため、これはPropsを介してTabNavに渡されます。
currentSelectedTabをTabNavの外側で定義する必要があるという事実は単に恐ろしいことです。そうは思わない?それは、コンポーネントのカプセル化を壊すことに私に見えます。どのようにそれを正しく行うには?フラックス?同じこと:currentSelectedTabをグローバルな状態で定義する必要はありません。
基本的には、すべてが機能していると、上部に巨大な状態があり、いくつかのウィジェットに属するものが含まれているようです。カプセル化は深く壊れている。
誰かが私にここで何が間違っているのか説明できますか?
いくつかのコードは、あなたが何をしているのかを視覚化するのに役立ちます –
'TabBar'できれいに処理できなかった' TabNavigator'の機能は何ですか? TabBarでナビゲーションを処理させて、 'defaultSelectedTab'の小道具を渡すことができなかった理由を想像していません。彼らがどちらもTabの名前を持っているという事実は、すでにかなり結びついていることを示唆しているようだ。 TabBarを他のものに再利用しようとしていますか?一般的なユースケースは何ですか? – philraj
これは一般的なやり方です。たとえばflexで。 [that](http://help.adobe.com/en_US/flex/using/WSc2368ca491e3ff92-59bf082612135c9e688-8000.html#WS70ef25857c0d979e-5df5db17123beb1864c-8000)を参照してください。彼らのViewStackは私のTabNavであり、ButtonBarは私のTabBarです –