import React, { useState } from "react";
import Avatar from "@material-ui/core/Avatar";
import Button from "@material-ui/core/Button";
import CssBaseline from "@material-ui/core/CssBaseline";
import TextField from "@material-ui/core/TextField";
import FormControlLabel from "@material-ui/core/FormControlLabel";
import Checkbox from "@material-ui/core/Checkbox";
import Link from "@material-ui/core/Link";
import Grid from "@material-ui/core/Grid";
import Box from "@material-ui/core/Box";
import LockOutlinedIcon from "@material-ui/icons/LockOutlined";
import Typography from "@material-ui/core/Typography";
import { makeStyles } from "@material-ui/core/styles";
import Container from "@material-ui/core/Container";
function Copyright() {
return (
<Typography variant="body2" color="textSecondary" align="center">
{"Copyright © "}
<Link color="inherit" href="https://material-ui.com/">
Archents
</Link>{" "}
{new Date().getFullYear()}
{"."}
</Typography>
);
}
const useStyles = makeStyles(theme => ({
paper: {
marginTop: theme.spacing(8),
display: "flex",
flexDirection: "column",
alignItems: "center"
},
avatar: {
margin: theme.spacing(1),
backgroundColor: theme.palette.secondary.main
},
form: {
width: "100%", // Fix IE 11 issue.
marginTop: theme.spacing(3)
},
submit: {
margin: theme.spacing(3, 0, 2)
}
}));
const SignUp = () => {
const classes = useStyles();
const [userProfile, setProfile] = useState({
firstName: "",
lastName: "",
email: "",
phone: "",
organization: "",
title: "",
password: "",
role: ""
});
const {
firstName,
lastName,
email,
phone,
org,
title,
password,
role
} = userProfile;
const handleChange = async event => {
event.preventDefault();
const { name, value } = event.target;
setProfile({
...userProfile,
[name]: value
});
};
const onSubmitSignUp = () => {
console.log(setProfile);
};
return (
<Container component="main" maxWidth="xs">
<CssBaseline />
<div className={classes.paper}>
<Avatar className={classes.avatar}>
<LockOutlinedIcon />
</Avatar>
<Typography component="h1" variant="h5">
Sign up
</Typography>
<form className={classes.form} noValidate>
<Grid container spacing={2}>
<Grid item xs={12} sm={6}>
<TextField
autoComplete="fname"
name="firstName"
variant="outlined"
required
fullWidth
id="firstName"
label="First Name"
autoFocus
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
id="lastName"
label="Last Name"
name="lastName"
autoComplete="lname"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
id="email"
label="Email"
name="email"
autoComplete="email"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
type="tel"
id="phone"
label="Phone"
name="phone"
autoComplete="phone"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
id="organization"
label="Organization"
name="organization"
autoComplete="organization"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
id="title"
label="Title"
name="title"
autoComplete="title"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
name="password"
label="Password"
type="password"
id="password"
autoComplete="current-password"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12} sm={6}>
<TextField
variant="outlined"
required
fullWidth
name="confirm-password"
label="Confirm Password"
type="password"
id="confirm-password"
autoComplete="confirm-password"
/>
</Grid>
<Grid item xs={12}>
<TextField
variant="outlined"
required
fullWidth
name="role"
label="Role"
id="role"
autoComplete="role"
onChange={handleChange}
/>
</Grid>
<Grid item xs={12}>
<FormControlLabel
control={<Checkbox value="allowExtraEmails" color="primary" />}
label="Remember me"
/>
</Grid>
</Grid>
<Button
fullWidth
variant="contained"
color="primary"
className={classes.submit}
onClick={onSubmitSignUp}
>
Sign Up
</Button>
<Grid container justify="flex-end">
<Grid item>
<Link href="#" variant="body2">
Already have an account? Sign in
</Link>
</Grid>
</Grid>
</form>
</div>
<Box mt={5}>
<Copyright />
</Box>
</Container>
);
};
export default SignUp;
这是来自物料界面的模板。我从GitHub的注册中选择了这个模板,我只导入了useState并尝试使用它。
它抛出“太多的重新渲染。React限制渲染数量以防止无限循环材质”,
我尝试过使用反应钩子,因为我不能实现类。
我不明白你为什么这么做:
const [use, set] = useState("nothing");
set("something");
这导致应用程序无限地重新渲染。每次调用set
,它都会重新渲染。通常情况下,你会在某个钩子中调用它,条件如下:
useEffect(() => {
set('something');
}, []);
这将仅在安装组件时调用set
,而不是连续调用。换句话说,不要在钩子之外使用setter函数。在中使用setter函数的最常见挂钩是useCallback
和useffect
。
请参阅留档了解更多信息。
您应该使用useCallback
钩子来设置状态。也没有理由使其异步
。
const handleChange = useCallback(event => {
event.preventDefault();
const { name, value } = event.target;
setProfile({
...userProfile,
[name]: value
});
}, [userProfile]);
如何防止以下错误: 太多的重新渲染。React限制渲染的数量,以防止无限循环。' 我刚刚将一个基于类的组件更改为功能组件,但它不起作用 我的源代码 我只是将一个基于类的组件更改为功能组件,我得到了这些错误。 0个 如何防止以下错误: 太多的重新渲染。React限制渲染的数量,以防止无限循环。'
当我试图设置状态,然后得到一个错误。错误:太多的重新渲染。React限制渲染的数量以防止无限循环。 我已经用
我正在尝试创建登录表单,但出现了此错误。 任何人都可以解释为什么会发生此错误?? 我是新来的反应本土。 忽略这个(只是为了加量)= =我得补充一些没用的句子因为StackOverflow给我< code > '看起来你的帖子大部分是代码;请再补充一些细节。(对这个stackoverflow错误感到非常沮丧)
我很困惑为什么Iam会出现这个错误:太多的重新呈现。React限制呈现次数以防止无限循环。当我尝试调用USESTAT保存checkBoxList数据时,就会发生这种情况。如果我注释掉行setListOptions(checkBoxList);错误消失了。我希望发生的是,setListoptions应该保存在本地,然后我可以调用listOptions来映射我的数据。谢谢你的协助。
我想建立一个组件 使用Axios将文件上传到API。 响应被存储并传递到另一个组件。 但使用下面的代码,我得到了太多的错误重新渲染和错误突出显示 组件的完整代码如下所示。我是一个比较新的反应者,3天多来一直在试图找出这个错误的根本原因,但没有任何帮助。我不知道我哪里出错了。
呈现以下组件时出现错误: 太多的重放。React限制呈现的数量以防止无限循环。?