Ionic React onIonChange在页面加载时触发

lmvvr0a8  于 2023-05-27  发布在  Ionic
关注(0)|答案(1)|浏览(160)

我有一个包含一些IonInputs的页面,它们的初始值是用fetch中的数据设置的。我的问题是onIonChange事件在我加载页面时立即触发。更改是调用一个函数,该函数设置一些变量,除非用户手动输入值,否则不应设置这些变量。我确信对于初始页面渲染,离子变化事件不应该被触发,但我在文档或一般搜索中找不到任何信息。谁能告诉我如何在设置值时停止onIonchange事件的发生,或者甚至在渲染之前等待值的设置?请看我下面的代码片段,我去掉了不需要的代码。我用的是React18和离子6
MyPage.tsx

const [person, setPerson] = useState<People>({}as People);
    const [addressType, setAddressType] = useState(""); 
    const [employer, setEmployer] = useState<People>({} as People); 

    useIonViewWillEnter(async()=>{
            let person = {} as People;
            if(urlParams.get('UUID') != undefined && urlParams.get('UUID') != null ){ 
                person = await getPersonByUUID("" + urlParams.get('UUID')) 
                localStorage.setItem("ABPerson", JSON.stringify(person))
            } 
            else { 
                person =JSON.parse(localStorage.getItem("ABPerson") ?? "null") ?? {} as People;
            }
            let employer = await getPersonByUUID(person?.employeeOf?.toString())
            
            setPerson(person);
            setEmployer(employer)
            setAddressType(person?.typeString?.toString());
    });

    return(
        <IonPage className="AddressBook">
            <IonInput 
                id="nameInput" 
                type="text" 
                className="textInput"                                                 
                value={person.name} 
                onIonChange={(e)=>HandleDetailsUpdate("name", e.detail.value)}>
            </IonInput>
        </IonPage>
)
fjnneemd

fjnneemd1#

也许这个解决方案适合你:
onIonChange is triggering more than one input on Ionic 5 React
在此期间,我将尝试替换:

const [person, setPerson] = useState<People>({}as People);
...
value={person.name}

执行人:

const [person, setPerson] = useState<People>();
...
value={person?.name}

这将初始化状态变量person为undefined,并且您不会将空对象强制转换为People。

相关问题