如何使用 for 循环呈现多个文本输入?
How can I render multiple text inputs with a for loop?
我试图在一个 for 循环中在屏幕上显示 5 个输入字段。我还想稍后(根据它们的状态)对它们中的每一个应用动态 class 。这是我的代码:
function App() {
...
return (
<Grid container className={classes.root}>
<CssBaseline />
<Grid item xs={false} md={7} className={classes.image} />
<Grid item xs={12} md={5} component={Paper} elevation={6} square>
<div className={classes.paper}>
<form className={classes.form} onSubmit={handleSubmit}>
{inputFields}
for (let i = 0; i < 5; i++) {
<TextField />
}
{for (let i = 0; i < 5; i++) {
<TextField />
}}
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
>
Submit
</Button>
</form>
</div>
</Grid>
</Grid>
);
}
这是我收到的错误:SyntaxError: Unexpected token.
我还在学习 React,所以我很确定我做错了。如何使用 for 循环渲染多个元素?有没有更好的方法?
谢谢!
您不能将 javascript 代码放在 JSX 声明中。您必须使用 {} 来表示用于生成 JSX 的任何 javascript 代码。
只要将它放在大括号中,就可以使用类似这样的东西代替 for 循环。
new Array(5).fill().map(() => <TextField/>)
最终结果:
function App() {
...
return (
<Grid container className={classes.root}>
<CssBaseline />
<Grid item xs={false} md={7} className={classes.image} />
<Grid item xs={12} md={5} component={Paper} elevation={6} square>
<div className={classes.paper}>
<form className={classes.form} onSubmit={handleSubmit}>
{new Array(5).fill().map(() => <TextField/>)}
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
>
Submit
</Button>
</form>
</div>
</Grid>
</Grid>
);
}
我们必须嵌入一些 JS 代码,这些代码 return 是一些 JSX 或 JSX 数组。
{new Array(5).fill().map((_) => (
<TextField/>
))}
此代码创建一个包含 5 undefined
个元素的数组。然后,.map
return 是一个数组,其中每个 undefined
元素都转换为 <TextField/>
。
因此我们 return 一个 JSX 数组。
我认为它不起作用的主要原因是 for
循环没有 return JSX。
我试图在一个 for 循环中在屏幕上显示 5 个输入字段。我还想稍后(根据它们的状态)对它们中的每一个应用动态 class 。这是我的代码:
function App() {
...
return (
<Grid container className={classes.root}>
<CssBaseline />
<Grid item xs={false} md={7} className={classes.image} />
<Grid item xs={12} md={5} component={Paper} elevation={6} square>
<div className={classes.paper}>
<form className={classes.form} onSubmit={handleSubmit}>
{inputFields}
for (let i = 0; i < 5; i++) {
<TextField />
}
{for (let i = 0; i < 5; i++) {
<TextField />
}}
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
>
Submit
</Button>
</form>
</div>
</Grid>
</Grid>
);
}
这是我收到的错误:SyntaxError: Unexpected token.
我还在学习 React,所以我很确定我做错了。如何使用 for 循环渲染多个元素?有没有更好的方法?
谢谢!
您不能将 javascript 代码放在 JSX 声明中。您必须使用 {} 来表示用于生成 JSX 的任何 javascript 代码。
只要将它放在大括号中,就可以使用类似这样的东西代替 for 循环。
new Array(5).fill().map(() => <TextField/>)
最终结果:
function App() {
...
return (
<Grid container className={classes.root}>
<CssBaseline />
<Grid item xs={false} md={7} className={classes.image} />
<Grid item xs={12} md={5} component={Paper} elevation={6} square>
<div className={classes.paper}>
<form className={classes.form} onSubmit={handleSubmit}>
{new Array(5).fill().map(() => <TextField/>)}
<Button
type="submit"
fullWidth
variant="contained"
color="primary"
className={classes.submit}
>
Submit
</Button>
</form>
</div>
</Grid>
</Grid>
);
}
我们必须嵌入一些 JS 代码,这些代码 return 是一些 JSX 或 JSX 数组。
{new Array(5).fill().map((_) => (
<TextField/>
))}
此代码创建一个包含 5 undefined
个元素的数组。然后,.map
return 是一个数组,其中每个 undefined
元素都转换为 <TextField/>
。
因此我们 return 一个 JSX 数组。
我认为它不起作用的主要原因是 for
循环没有 return JSX。