Ionic React中如何在硬件返回按钮事件中编程关闭IonSelect下拉框
Ionic React 硬件返回键关闭IonSelect下拉框实现
在Ionic React应用的表单中使用了IonSelect组件,当下拉框处于展开状态时,需要在硬件返回按钮的事件监听回调中编程关闭IonSelect下拉框,初始代码如下:
export const SingleSelection: React.FC = () => { const [gender, setGender] = useState<string>(); useEffect(() => { document.addEventListener('ionBackButton', (ev: any) => { ev.detail.register(1000, async (processNextHandler: any) => { console.log('Handler B was called!'); processNextHandler(); }); }); return () => { console.log("use effect return"); } }, []) return ( <IonPage> <IonContent> <IonItem> <IonLabel>Gender</IonLabel> <IonSelect value={gender} placeholder="Select One" onIonChange={e => setGender(e.detail.value)}> <IonSelectOption value="female">Female</IonSelectOption> <IonSelectOption value="male">Male</IonSelectOption> </IonSelect> </IonItem> </IonContent> </IonPage> ); };
已解决完整代码
以下是集成了Modal的完整可运行代码,在硬件返回按钮事件监听方法中,会优先关闭处于打开状态的ion select,之后再关闭Modal:
const ModalExample: React.FC = () => { const [showModal, setShowModal] = useState(false); const [gender, setGender] = useState<string>(); useEffect(() => { document.addEventListener('ionBackButton', (ev: any) => { ev.detail.register(1000, async (processNextHandler: any) => { console.log('Handler B was called!'); try { console.log("close ion select"); const alert = await alertController.getTop(); if (alert) { alert.dismiss(); return; } console.log("close modal") const element = await modalController.getTop(); if (element) { //element.dismiss(); setShowModal(false) return; } } catch (error) { console.log(error); } processNextHandler(); }); }); return () => { console.log("use effect return"); } }, []) return ( <IonContent> <IonModal isOpen={showModal} cssClass='my-custom-class'> <p>This is modal content</p> <IonItem> <IonLabel>Gender</IonLabel> <IonSelect value={gender} placeholder="Select One" onIonChange={e => setGender(e.detail.value)}> <IonSelectOption value="female">Female</IonSelectOption> <IonSelectOption value="male">Male</IonSelectOption> </IonSelect> </IonItem> <IonButton onClick={() => setShowModal(false)}>Close Modal</IonButton> </IonModal> <IonButton onClick={() => setShowModal(true)}>Show Modal</IonButton> </IonContent> ); };
内容的提问来源于stack exchange,提问作者Uddip Acharjee Shuvo
相关产品推荐
相关产品推荐

