【发布时间】:2021-01-31 10:06:43
【问题描述】:
const EmailSelection: React.FC<{emails: EmailDataType[] | undefined}> = ({emails}) => {
const [emailsCopy, setEmailsCopy] = useState<EmailDataType[] | undefined>(emails);
const [defaultEmail2, setDefaultEmail2] = useState<string>();
useLayoutEffect(() => {
setDefaultEmail2(emailsCopy?.find(email => email.isDefault)?.email);
}, [emailsCopy])
const changeDefaultEmail = ((selectedEmail: string) => {
const emailsCopy2 = emailsCopy?.map(email => {
return email.email === selectedEmail ? { ...email, isDefault: true }
: { ...email, isDefault: false }
});
setEmailsCopy(emailsCopy2);
});
return (
<IonPage >
<IonContent className={[style['main-content'], 'ion-padding'].join(' ')} >
<IonRadioGroup
value={defaultEmail2}
onIonChange={e => changeDefaultEmail(e.detail.value)}>
{emailsCopy?.map((email) => {
return (
<IonItem key={email.email} lines='none' className='ion-margin-start'>
<IonLabel>{email.email}</IonLabel>
<IonRadio slot='start' value={email.email} />
</IonItem>
);
})}
</IonRadioGroup>
</IonContent>
</IonPage>
);
};
export default EmailSelection;
方法 changeDefaultEmail 在单选按钮 onChange 事件上执行。由于某种原因,这会在此函数和 useLayoutEffect 之间启动一个无限循环。我不知道为什么。
我在这个问题上苦苦挣扎了很长时间!
【问题讨论】:
标签: javascript reactjs ionic-framework react-hooks use-effect