IonRouterOutlet の中には Route か Redirect しか入れてはいけない
チームの凄腕エンジニアに「Ionic/Reactでルーティング制御する際のDOMツリーに縛りがあるよ」と教えてもらった。
確かによくみると、
IonRouterOutlet には、 Route と Redirect のみを含める必要があります。 他のコンポーネントは、 Route の結果、または IonRouterOutlet の外部でレンダリングする必要があります。
IonRouterOutlet は別の IonRouterOutlet の子孫であってはいけません。
と書いてある。
自分がどういう風に書いてたかと言うと、 Route/Redirect 部分を別コンポーネントとして切り出していたのでありました。
const Routes: React.FC = () => (
<>
<Route exact path="/hoge" component={Hoge} />
<Route exact path="/fuga" component={Fuga} />
<Route exact path="/hige" component={Hige} />
<Redirect exact path="/home" to={Home} />
</>
);
const Frame: React.FC = () => (
<IonRouterOutlet>
<Routes />
</IonRouterOutlet>
);
理由は、条件に応じてアプリ内で有効なパスや無効なパスをこのFrameレイヤーでできればいいなと思ったからでしたが、
ルールに沿っておらず、予期せぬ挙動が起きていたり、よくない設計になっていました。
プロジェクト終盤に気づかなくてよかった・・・。