const [flag, setFlag] = React.useState(false)
const [username, setUsername] = React.useState('')
const [password, setPassword] = React.useState('')
const [errorUsername, setErrorUsername] = React.useState(true)
const [errorPassword, setErrorPassword] = React.useState(true)
const [text, setText] = React.useState({
user: 'Enter username*',
pass: 'Enter password*',
})
const userValidate = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
const passValidate = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[a-zA-Z]).{0,}$/
React.useEffect(
() => setText({
user: errorUsername ? 'Username*' : 'Invalid username',
pass: errorPassword ? 'Password*' : 'Invalid password',
}),
[errorPassword, errorUsername]
)
React.useEffect(
() => {
setErrorPassword(passValidate.test(password))
},
[password]
)
React.useEffect(
() => setErrorUsername(userValidate.test(username)),
[username]
)
I just want that my text only change after users enter their accounts But all my useEffect always execute immediately after initial render without any interactions though I have put dependencies for them