我有一个特定的用例,我需要通过点击标签栏中的标签来触发模态打开,类似于Instagram在点击标签栏中的(+)图标添加新帖子时触发模态打开。
鉴于以下离子React标签设置,我应该如何重新配置,使其工作?我非常希望避免复制/粘贴我的模态代码到每一个单一的网页。
应用程序tsx
const App: React.FC = () => {
return (
<IonApp>
<IonReactRouter>
<IonTabs>
<IonRouterOutlet>
<Route path="/signup" component={SignUp} exact={true} />
<Route path="/login" component={Login} exact={true} />
<Route path="/home" component={Home} />
<Redirect exact from="/" to="/home" />
</IonRouterOutlet>
<IonTabBar slot="bottom">
<IonTabButton tab="home" href="/home">
<IonIcon icon={triangle} />
<IonLabel>Explore</IonLabel>
</IonTabButton>
<IonTabButton tab="submit" href="/submit">
<IonIcon icon={addCircle} />
<IonLabel>Submit</IonLabel>
</IonTabButton>
<IonTabButton tab="login" href="/login">
<IonIcon icon={square} />
<IonLabel>Log In</IonLabel>
</IonTabButton>
</IonTabBar>
</IonTabs>
</IonReactRouter>
</IonApp>
);
};
我应该在哪里插入下面的代码,这样我就可以从选项卡栏触发它,并让它覆盖页面内容,而不管我在哪个选项卡中?
<IonModal isOpen={showModal}>
<p>This is modal content</p>
<IonButton onClick={() => setShowModal(false)}>Close Modal</IonButton>
</IonModal>
2条答案
按热度按时间fhity93d1#
https://ionicframework.com/docs/api/tabs
基于选项卡API,您可以确定用户和调用
setShowModal(true)
选择了哪个选项卡在选项卡事件- www.example.com下https://ionicframework.com/docs/api/tabs#events,有一个名为
tabSelected
的事件x0fgdtte2#
因为模态不需要自己的路由,并且
IonTabBar
只能接受IonTabButton
作为子路由,所以如果您想在其中放置一个IonButton
来打开模态,它需要放置在IonTabs
之上,并使用绝对样式将其放置在选项卡栏之上。您可以在选项卡栏中放置一个虚拟IonTabButton
,以确保为绝对样式留有空间-定位按钮(确保使用样式明显隐藏它)。要通过按下按钮打开模态,请将
IonModal
放入其自己的组件中,然后将其导入App. tsx。在IonModal
上使用trigger
属性,确保在选项卡栏按钮上使用与trigger
属性相同的id
。App.tsx
MyModal.tsx
这似乎是一个非常老套的解决方案,应该有更好的方法来实现它。