私は非常にシンプルなアプリケーションで、リストビューと詳細ビューを持っています。リストビューは、アイテムの配列を含むdata
propにマップされたgraphqlクエリでラップされます。 1つの項目を選択すると詳細ビューがインスタンス化されます。ここで項目のIDはその項目の別のgraphqlクエリーを作成するために使用されます。React/Apolloの共有クエリ状態
const ListView = graphql(ALL_ITEMS, ...)(ListViewComponent);
<ListView data={ [....] }>
<Detail>
<Next /> <Prev /> {/* <-- need info from ListView.data */}
</Detail>
{ this.props.data.map(....) }
</ListView>
問題は、その詳細ビューに前/次のナビゲーションを追加しています。詳細コンポーネントはコンポーネント内のすべてのアイテムを含むdata
小道具の内容を認識しません。典型的なreduxアプリケーションでは、アイテムをグローバルなアプリケーション状態として保存し、それらをコンポーネントに注入するのは簡単ですが、Apolloはそのようには動作しません。その状態ツリーは非常に消耗的ではない(例えばconnect()
を使用)。
私は、このためのいくつかの可能な解決策を見て、それらのどれも偉大に見えるん:
currentOffset + 1
とcurrentOffset -1
探しgraphqlクエリと前/次のナビゲーションコンポーネントをラップします。これは間違いなく最も「アポロ」解決策ですが、data
小道具がないため、そのコンポーネントにはcurrentOffset
が不明ですという問題があります。さらに、リストビューのクエリ上の他の変数(フィルタ、並べ替えなど)も渡されていることを確認してください。また、状態ツリーにはわかりにくいapollo
もあります。- 私のレデューサーで
APOLLO_QUERY_RESULT
アクションを聞いて、他のコンポーネントに必要なすべての情報を含むクエリ結果の2番目のコピーを維持します。 - を使用して、子どもに小道具
data
を共有してください。 data
小道具を子供に明示的に渡します。
一般的なシナリオのようです。適切なアプローチは何ですか?