enpitut2017 / Regi-Urico-client

NearBuyによるレジ機能付き在庫管理アプリ「レジウリコ (Regi-Urico)」のクライアント側レポジトリ
1 stars 0 forks source link

Redirect loopを根本から解消, fixed #60 #64

Closed urushiyama closed 6 years ago

urushiyama commented 6 years ago

60 に対する修正です。

リダイレクトループが起こる原因を根本から絶つために、RedirectOnceというコンポーネントを作りました。

RedirectOnce

Usage

if (condition) return <Redirect to={"path"} />;

の代わりに、

<RedirectOnce to={"path"} if={condition} />

と記述することで、同一ロケーションに対するリダイレクトループは発生しなくなります。 conditionfalseの場合には<div />を出力します。

shuuji3 commented 6 years ago

動作確認をしてみたのですが、API側でデフォルトイベントを作成するようにしないと、やはり同じようにリダイレクトループに嵌ってしまうようです…。

どうしてリダイレクトループが起こるのかよく理解していないのですが、 #65 の変更を行うと一応問題は解消するみたいです。

urushiyama commented 6 years ago

やべ、ローカルでもリダイレクトループ解消できてませんでした。

HasegawaYohei commented 6 years ago

これさ, createEventFormがwithNavigationBar使ってるからリダレクトループしてるって認識で合ってる?

urushiyama commented 6 years ago

まさにそれが原因です。

HasegawaYohei commented 6 years ago

じゃあ createEventFormにリダイレクトする条件に, pathが/create_eventではないことを追加することで, とりあえずは解消できる?

urushiyama commented 6 years ago

よく考えなくてもprops.locationはパス名ではなくそれを含むオブジェクトで、props.to === props.locationは文字列とオブジェクトの比較になり常にfalseになりますね。そこを修正したらリダイレクトループ解消できました。

urushiyama commented 6 years ago

今度こそ、リダイレクトループが解消できました! (ただし2つ以上のパスがループになっている場合はリダイレクトループが発生する可能性が残ってます。)

shuuji3 commented 6 years ago

ありがとうございます。今度は正しく動作しました!