3

過去数週間、React Router を使用して大きな成功を収めてきましたが、解決策が見つからないように見える問題に遭遇しました。任意のクエリ パラメータが URL に追加されると (この例では、電子メールからの URL 追跡目的で)、表示されたページが読み込まれ、警告なしで自動的に更新されます。

最も基本的なルート設定を考えると:

var routes = (
  <Route handler={ResultsController}>
     <DefaultRoute handler={Results} />
  </Route>
);

そして、デフォルトのハンドラー:

Router.run(routes, function (Handler, state) {
  React.render(<Handler params={state.params} />, domElement);
});

http://whatever.com/resultsすべてに移動すると正常に動作しhttp://whatever.com/results?ref=trackますが、ページに移動すると更新され、にリダイレクトされhttp://whatever.com/results#/ます。ハッシュとスラッシュのにqueryParams を追加すると、正しい動作になることに注意してください。問題は、これらのリンクの多くがサーバー側で生成され、そのような方法でハッシュを強制することは望ましくないことです。

queryParams のワイルドカード ハンドラーを設定する必要がありますか? ドキュメントへのポインタも役立ちます。

編集:
これは包括的な質問/意図しない更新につながるバグに対処していませんが、Router.HistoryLocation PushState オプションを使用してルートをロードすると、queryParams の事前レンダリングが可能になることがわかりました:

Router.run(routes, Router.HistoryLocation, function (Handler, state) {
  React.render(<Handler params={state.params} query={state.query} />, domElement);
});

ありがとう!

4

1 に答える 1

3

ここでの問題は、Router.HashLocation指定しない場合のデフォルトの場所である を使用していることです。

Router.run(routes, Router.HistoryLocation, function(...

問題は解決しますが、それを処理できるサーバーが必要です。

それでもハッシュの場所が必要な場合は、クエリ#. に関する限りHashLocation、 の前のクエリは#、それが理解できる場所の一部ではありません。

于 2015-03-09T22:57:19.917 に答える