为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 React 中强制重新渲染函数组件?

如何在 React 中强制重新渲染函数组件?

哔哔one 2021-06-29 17:58:56
当函数的变量之一发生变化时,我想重新渲染我的函数组件。重要的是这个变量不附带道具。我正在使用 Material UI 和 React 16.8 构建一个简单的注册表单。它带有我正在尝试使用的钩子 API。问题是当输入字段验证的结果发生变化时,我想重新渲染我的组件。export default function Register(props) { let emailError = false; const [email, setEmail] = useState(''); const validateEmail = (email) => {    if(email) {      emailError = false;    } else {      emailError = true; // How to force re-render if email is not valid?     } }  return (<div>            <TextField                  error={emailError}                  variant="outlined"                  required                  fullWidth                  id="email"                  label="Email Address"                  onKeyUp={(ev) => validateEmail(ev.target.value)}                  onChange={(ev) => setEmail(ev.target.value)}                  name="email"                  autoComplete="email"                  aria-describedby="email-error-text"                />   </div>);}在这里你可以找到这个组件的源代码:https : //github.com/przemek-nowicki/auth-react-and-redux/blob/master/src/componnents/Register.js
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

你可以用这个,


const [emailError, setEmailError] = useState(false);

 const [email, setEmail] = useState('');

 const validateEmail = (email) => {

    if(email) {

      setEmailError(false);

    } else {

      setEmailError(true); 

    }

 } 


查看完整回答
反对 回复 2021-07-01
?
杨魅力

TA贡献1811条经验 获得超6个赞

您可能也应该将错误布尔值存储在状态中。


const [emailError, setEmailError] = useState(false);

const [email, setEmail] = useState('');


useEffect(() => {

  setEmailError(!email);

}, [email]);


查看完整回答
反对 回复 2021-07-01
  • 2 回答
  • 0 关注
  • 2018 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信