reactjs - onIonChange 在 Ionic 5 React 上触发多个输入

标签 reactjs ionic-framework state jsx

我有多个输入,每个输入都有自己的 IonItem。我正在使用 onIonChange 将输入的值设置为用户键入的值。但是当我单击一个输入时,其他输入会激活,就好像 onIonChange 正在触发它们一样。以下是我的组件示例:

const ReservationForm: React.FC = () => {

 const [name, setName] = useState<string>();
 const [email, setEmail] = useState<string>();
 const [phone, setPhone] = useState<number>();

return (
  <IonList>
     <IonItemDivider className="backgroundPrimary">Guest</IonItemDivider>
     <IonItem>
        <IonLabel position="stacked">Name</IonLabel>
        <IonInput value={name} onIonChange={e => setName(e.detail.value!)}></IonInput>
     </IonItem>
     <IonItem>
        <IonLabel position="stacked">Email</IonLabel>
        <IonInput value={email} onIonChange={e => setEmail(e.detail.value!)}></IonInput>
     </IonItem>
     <IonItem>
        <IonLabel position="stacked">Phone Number</IonLabel>
        <IonInput type="number" value={phone} onIonChange={e => setPhone(parseInt(e.detail.value!, 10))}></IonInput>
    </IonItem>
 </IonList>
);
};
export default ReservationForm;

这是问题的图像:

problem

如您所见,我在电子邮件中输入了一封信,但电话号码上的 float 标签也被触发了。我是在 useState 做错了什么,还是绑定(bind)有问题?
任何帮助表示赞赏。

我将 Ionic 5 与 React 一起使用

最佳答案

onIonChange 事件似乎存在问题,因为在第一次输入时,它会在每个 IonInput 上触发,并为每个不是目标的元素返回一个未定义的值。现在,如果我们将值设置为 parseInt(e.detail.value!, 10)在状态下,每次在数字输入上触发 onIonChange

要修复它,您可以为未定义添加条件检查

<IonItem>
    <IonLabel position="floating">Phone Number</IonLabel>
    <IonInput
      type="number"
      value={phone}
      onIonChange={e => {
        if (e.detail.value === undefined) return;
        setPhone(parseInt(e.detail.value!, 10));
      }}
    />
</IonItem>

上述解决方案暂时适用于您,但我建议您在 github 上提出有关此问题的问题。

Working demo with the above solution

关于reactjs - onIonChange 在 Ionic 5 React 上触发多个输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62077542/

相关文章:

javascript - 如何简化ReactJS中的setTimeout

php - JSON.parse 处的 JSON 输入意外结束

ios - 隐藏 Ionic(AngularJS) 后退按钮不出现

reactjs - react 类型错误 : Cannot destructure property as it is undefined

javascript - 在子组件的状态之间共享父状态?

javascript - 当用户移动到下一个链接时如何突出显示以前的链接?

javascript - React JS 对象集合的状态更新

java - 如何回退应用程序状态?

javascript - 接下来的 JS Layout 组件,将 props 传递给 child

ios - xcode 构建错误 : project does not contain a scheme