typescript 首次渲染时状态未正确更新

gfttwv5a  于 2022-11-30  发布在  TypeScript
关注(0)|答案(1)|浏览(164)
useEffect(() => {
    getDocuments('CL', 'birthDate, telephone', null)
    .then((res) => {
      let birthDateMD = res[0].birthDate
      let birthDate:any = new Date(birthDateMD)
      let dateMDY = `${birthDate.getDate()}/${birthDate.getMonth() + 1}/${birthDate.getFullYear()}`;
      setBirthday(dateMDY)
      setNumber(res[0].telephone)
    })
  }, [])

  useEffect(() => {
    if (validBirthday && telephoneValid && name !== '' && name !== ' ' && lastName !== '' && lastName !== ' ') {
      setShow(true)
    } else {
      setShow(false)
      console.log("sad")
    }
  }, [validBirthday, name, lastName, telephoneValid])

然后,我让所有onChange函数基于e. target. value更新状态。

const handleLastNameChange = (e: any) => {
  setLastName(e.target.value);
}

此外,我有一个div,它根据show value有条件地呈现。

<div className={`${handles.saveButtonOne}`} onClick={submitData} style={{display: show === true ? "block" : "none"}}>

最后,这里是输入名称的代码。

<input
        className={`${handles.inputOne}`}
        type="text"
        defaultValue={session?.namespaces?.profile?.firstName?.value}
        onChange={handleNameChange}
      />

在第一次渲染时,即使所有的输入都被正确填充(在这种情况下show必须为true),show也被设置为false,我需要在第一次渲染时检查这些值。
例如,如果我删除了名称中的一个单词,显示设置为真,按钮将出现。
任何帮助都将不胜感激。

  • 谢谢-谢谢
gjmwrych

gjmwrych1#

假设使用useState宣告name
尝试使用value而不是defaultValue来输入此字段。

<input
    className={`${handles.inputOne}`}
    type="text"
    value={name}
    onChange={handleNameChange}
  />

如果需要将其初始化为某个默认值,请使用useState first参数。
建议阅读uncontrolled与受控组件。希望这有帮助。

相关问题