我为重置密码页面制作了一个反应组件。重置令牌发送到用户邮箱后,重置页面有三个输入:令牌、新密码和确认密码。后两者是隐藏的,直到sha256 token
在令牌字段中输入 a,密码字段出现,令牌字段消失。这曾经有效,直到我还在重置 URL 中转发了带有重置令牌的 URL。因此我不得不compShow()
在我的useEffect()
同样,一旦组件加载,它就会检查令牌并更新令牌字段,使其不可见。这适用于带有重置令牌的 URL,但没有重置的 URL 应该首先仅显示令牌字段,然后隐藏令牌并显示密码字段现在无法按预期工作。只有在输入令牌后按一个额外的字符(我使用空格),令牌字段才会消失。我认为这是因为我第一次更改函数中placeholder
状态变量的值时onChangedHandler
,compShow()
没有被触发。但是当我添加一个额外的字符时,该compShow
函数会检测到的变化placeholder
并执行其各自的代码。
有人能告诉我为什么会发生这种情况,我应该怎么做才能得到预期的结果?
下面提供了代码片段
const [placeholder, setPlaceholder] = useState('')
const { onReleaseError, onError } = props
const compShow = useCallback(() => {
if (validator.isHash(placeholder, 'sha256')) {
setShowToken({ display: 'none' })
setShow(style.show)
setErrorType('red')
onReleaseError()
}
}, [placeholder, onReleaseError])
useEffect(() => {
const path = new URL(document.location).pathname.split('/')[2] || null
if (path) {
setPlaceholder(path)
compShow()
} else {
setErr(onError)
if (onError) setErrorType('green')
}
}, [compShow, onError])
const onChangeHandler = e => {
setPlaceholder(e.target.value)
compShow()
}