gpt4 book ai didi

javascript - Material UI 文本字段错误在 reactjs 中无法正常工作

转载 作者:行者123 更新时间:2023-12-04 10:14:41 25 4
gpt4 key购买 nike

我正在使用功能组件和 Material ui。我创建了一个带有 2 个文本字段的表单。我只想在满足特定条件时启用错误 Prop 。并且仅在单击提交按钮时检查条件。不知何故,它只检查少数条件。我很困惑为什么会发生这种情况。

如果有人可以看看我的代码并帮助我:

代码:

import React, {useState, useEffect} from 'react'
import axios from 'axios'
import image from '../images/app_icon_without_bg.png'

import {Link} from 'react-router-dom'
import Button from '@material-ui/core/Button/index'
import MuiThemeProvider from '@material-ui/core/styles/MuiThemeProvider'
import Card from '@material-ui/core/Card'
import TextField from '@material-ui/core/TextField'
import Avatar from '@material-ui/core/Avatar'
import {amber} from '@material-ui/core/colors'
import {makeStyles} from '@material-ui/core/styles'
import {styled} from '@material-ui/core/styles'
import {Redirect} from "react-router-dom"

const MyCard = styled(Card)({

borderRadius: 20,
// boxShadow:'0 3px 5px 2px rgba(255, 105, 135, .3)',
background: '#f3f3f3',
boxShadow: '6px 6px 10px 0px rgba(112,112,112,0.16), -6px -6px 10px 0px #FFFFFF',
padding: '50px 10px',
})


const MyAvatar = styled(Avatar)({
background: 'linear-gradient(45deg, #008080 30%, #20B2AA 90%)',
border: 0,
color: 'white',
height: 90,
width: 90,
margin: "auto",

})

const MyButton = styled(Button)({
background: 'linear-gradient(45deg, #008080 30%, #20B2AA 90%)',
border: 0,
color: 'white',
width: 100,
justifyContent: "center",
textDecoration: "none",
boxShadow: '0px 8px 10px -5px rgba(124,133,133,1)'
// margin:"auto"
})


// const useStyles = makeStyles((theme) => ({
// root: {
// display: 'flex',
// '& > *': {
// margin: theme.spacing(1),
// },
// },
//
//
// amber: {
// backgroundColor: amber[500],
// width: theme.spacing(7),
// height: theme.spacing(7),
//
// },
//
// button_color:{
// backgroundColor: amber[500],
//
// }
//
//
// }))


function Login() {
// const classes = useStyles()


//USE EFFECT
useEffect(() => {
}, []
)

//SETTING THE STATES
// const [username,setUserName]=useState('')
// const [password,setPassword]=useState('')
// const [errorMessage,setErrorMessage]=useState('')

const [form, setForm] = useState({
username: '',
password: '',
errorUser: false,
errorPassword: false,
helperTextUserName: '',
helperTextPassword: ''


})


const changeHandler = (event) => {
setForm({
...form,
[event.target.name]: event.target.value
})
}


//POSTING USERNAME AND PASSWORD TO DB
function handleClick(event) {
event.preventDefault()

const userObject = {
userName: form.username,
password: form.password
}

let letters = /^[A-Za-z0-9]+$/

// let isValid = letters.test(form.username)
// let err = ''


if (form.username !== '' && !form.username.match(letters)) {
// err = <p>Please enter your username.</p>
setForm({
...form,
helperTextUserName: 'Please use alphanumerics.',
errorUser: true
})
}
else if (form.username === '') {
// err = <p>Please enter your username.</p>
setForm({
...form,
helperTextUserName: 'Please enter your username.',
errorUser: true
})

} else if (form.password === '') {
// err = <p>Please enter your password.</p>
setForm({
...form,
helperTextPassword: 'Please enter your password.',
errorPassword: true
})


} else if (form.username === '' && form.password === '') {
// err = <p>Please fill the fields to proceed.</p>
setForm({
...form,
helperTextUserName: 'Please fill the fields.',
errorUser: true,
errorPassword: true
})

} else {
axios.post(`/api/login`, userObject)
.then(window.location = "/home")
.catch(err => console.error(err))

}

}


return (

<div className='login'>
<MyCard className='card'>

<div>

<img src={image} width="90" height="100px"/>
<p className={'card-heading-main'}>COMPLAINT MANAGEMENT SYSTEM</p>

<form>
<TextField
error={form.errorUser}
helperText={form.helperTextUserName}
autoFocus
id="outlined-basic"
variant="outlined"
type="username"
label="Username"
name={'username'}
className={'login-input'}
placeholder="john123"
onChange={changeHandler}
/>
<br/>
<br/>

<TextField
error={form.errorPassword}
helperText={form.helperTextPassword}
id="outlined-basic"
variant="outlined"
label="Password"
name={'password'}
className={'login-input'}
type="password"
onChange={changeHandler}
/>

<br/>
<br/>
<br/>
<MyButton onClick={handleClick} variant="raised">Submit</MyButton>
</form>
</div>
</MyCard>
</div>
)
}

export default Login



编辑 :
上面的代码现在工作正常。

最佳答案

您需要防止默认提交按钮行为,并且您忘记在之前的状态中进行合并,从而导致在状态中放置了错误的数据。 ( usernamepassword == undefined 将通过所有检查)

//POSTING USERNAME AND PASSWORD TO DB
function handleClick(evt) {
evt.preventDefault();
const userObject = {
userName: form.username,
password: form.password
}

let username = form.username
let password = form.password
let letters = /^[0-9a-zA-Z]+$/
let err = ''

if (username !== '' && !username.match(letters)) {
// err = <p>Please enter your username.</p>
setForm({
...form,
helperTextUserName: 'Please use alphanumerics.',
errorUser: true
})
}
if (username === '') {
// err = <p>Please enter your username.</p>
setForm({
...form,
helperTextUserName: 'Please enter your username.',
errorUser: true
})

} else if (password === '') {
// err = <p>Please enter your password.</p>
setForm({
...form,
helperTextPassword: 'Please enter your password.',
errorPassword: true
})


} else if (username === '' && password === '') {
// err = <p>Please fill the fields to proceed.</p>
setForm({
...form,
helperTextUserName: 'Please fill the fields.',
errorUser: true,
errorPassword: true
})

} else {
axios.post(`/api/login`, userObject)
.then(window.location = "/home")
.catch(err => console.error(err))

}

}

关于javascript - Material UI 文本字段错误在 reactjs 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61133239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com