【发布时间】:2021-11-09 11:50:06
【问题描述】:
在我的 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>
);
};
更新:[已解决]:这是我更新后的完整代码,带有模态。在硬件后退按钮事件侦听器方法中,首先关闭离子选择(如果它保持打开状态),然后关闭模式
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>
);
};
【问题讨论】:
标签: reactjs ionic5 ion-select