s.h*_*sam 1 javascript reactjs material-ui
我希望在用户单击 TextField 之前不会显示错误消息。这是我的代码:
import React, { useState, useEffect } from 'react';
import { TextField, Grid, Button } from '@material-ui/core';
const ReplyToComment = () => {
const [replyContent, setReplyContent] = useState();
const [errorMessage, setErrorMessage] = useState([]);
useEffect(() => {
if(replyContent) {
if(replyContent.length > 7){
setErrorMessage([]);
} else {
setErrorMessage(["Your answer is too short"])
}
} else {
setErrorMessage(["answer field can not empty"])
}
}, [replyContent]);
const handleChange = (event) => {
setReplyContent(event.target.value)
};
const handleSubmit = async () => {
console.log("************")
};
return (
<Grid container spacing={4} alignItems="center" justify="center" >
<Grid item xs={12}>
<TextField
value={replyContent}
name="reply"
fullWidth
required
error={Boolean(errorMessage.length)}
multiline
label="answer"
helperText={errorMessage[0]}
onChange={handleChange}
/>
</Grid>
<Button onClick={handleSubmit} variant="contained" color="primary" disabled={Boolean(errorMessage.length)}>add</Button>
</Grid>
);
}
export default ReplyToComment;
Run Code Online (Sandbox Code Playgroud)
这样,错误消息会在用户执行任何操作之前显示,但我希望在用户单击 TextField 之前不会显示错误消息。
最简单的解决方案是使用一个标志来保存有关 TextField 的单击(触摸)状态的信息。
例子:
const ReplyToComment = () => {
const [replyContent, setReplyContent] = useState();
const [errorMessage, setErrorMessage] = useState([]);
const [touched, setTouched] = useState(false);
const handleTouch = () => {
setTouched(true);
};
// ...
return (
<Grid container spacing={4} alignItems="center" justify="center" >
<Grid item xs={12}>
<TextField
value={replyContent}
name="reply"
fullWidth
required
onFocus={handleTouch}
error={touched && Boolean(errorMessage.length)}
multiline
label="answer"
helperText={touched && errorMessage[0]}
onChange={handleChange}
/>
</Grid>
<Button onClick={handleSubmit} variant="contained" color="primary" disabled={Boolean(errorMessage.length)}>add</Button>
</Grid>
);
}
Run Code Online (Sandbox Code Playgroud)
我已将值设置为打开onFocus,但这完全取决于您何时希望将 TextField 分类为触摸 ( onBlur, onClick)
| 归档时间: |
|
| 查看次数: |
11017 次 |
| 最近记录: |