反応ルータのLink
コンポーネントを介してオブジェクトを渡すことは可能ですか?
何かのようなもの:<Link to='home' params={{myObj: obj}}> Click </Link>
props
からParent
コンポーネントにChild
を渡すのと同じ方法で。
それが不可能な場合、これを達成する最良の方法は何ですか:
React + Fluxアプリがあり、テーブルにデータを表示します。行の1つをクリックすると、それが表示されます。いくつかのdetailsこの行のコンポーネント行には必要なデータがすべて揃っているので、Link
に渡すだけでいいと思いました。
もう1つのオプションは、URLの行のid
を渡し、それをdetailsコンポーネントで読み取り、IDでストアからデータを要求することです。
上記を達成するための最良の方法は何かわからない...
この質問に対する私の最終的な結論は、適切に考え抜いたことではないということです。 Link
を介してデータを渡すだけで、Child
コンポーネントでアクセスできるようになりました。 Colin Ramsay が述べたように、state
にはLink
と呼ばれるものがありますが、そうすることはできません。ユーザーが何かをクリックしてLink
コンポーネントに移動した場合にのみ、データがChild
を介して渡されるときに正常に機能します。
問題は、ユーザーがurl
で使用されているLink
にアクセスすると、データを取得する方法がないときに発生します。
したがって、私の場合の解決策は、ID
paramsでLink
を渡し、次にStore
にデータがあるかどうかを確認することです(ユーザーはLink
を介してアクセスします) Store
からこのデータを取得します。
OrデータがStore
にない場合、action
を呼び出してAPIからデータを取得します。
いいえ、params
でオブジェクトを渡すことはできません。したがって、最善の計画はidをストアに渡し、ストアにCHANGE
イベントを発行させることです。コンポーネントにストアの情報を照会させる。
リンクを介してオブジェクトを渡すことができます。 paramsではなくクエリ内にデータを追加し、オブジェクトを文字列化します。
<Link to={{
pathname: `/blog/${post.id}`,
query: {
title: post.title,
content: post.content,
comments: JSON.stringify(post.comments)
}
}}>Read More...</Link>
次に、子コンポーネントで文字列を解析してオブジェクトに戻します。
JSON.parse(this.props.comments)
これは不可能です。文字列IDなど、URLに保存できるものを渡す必要があります。次に、そのIDを使用してオブジェクトのルックアップを実行します。
JSONをシリアル化してから、受信側で逆シリアル化してみてください。