【发布时间】:2021-08-27 08:09:04
【问题描述】:
我需要在默认值中设置一个值,无论基于用户级别下拉值中先前选择的值意味着什么,我的任务是我需要在默认选择中设置该值,因为在我时间一个值成真,所以如果用户在上一个下拉菜单中选择任何一个名称,例如在用户名下拉菜单中 dev_sams 选择所以我需要将制造商设置为直接在用户级别默认值标签将根据用户名更改,因此需要设置动态我添加了一些示例如何值和为了更好地理解标签,请参阅 CodeSand Box 链接
import React, { useMemo } from "react";
import {
Grid,
Card,
CardContent,
Button,
Box,
TextField,
MenuItem,
makeStyles
} from "@material-ui/core";
import { useFormik } from "formik";
const useStyles = makeStyles((theme) => ({
formGrid: {
padding: theme.spacing(2)
},
tableContainer: {
maxHeight: 440
}
}));
const userList = [
{
username: "aabcd@email.com",
maker: true,
checker1: false,
checker2: false,
checker3: false,
checker4: false,
checker5: false
},
{
username: "aabc@email.com",
maker: true,
checker1: false,
checker2: false,
checker3: false,
checker4: false,
checker5: false
},
{
username: "aabcssd@email.com",
maker: false,
checker1: true,
checker2: false,
checker3: false,
checker4: false,
checker5: false
},
{
username: "dev_sams",
maker: true,
checker1: false,
checker2: false,
checker3: false,
checker4: false,
checker5: false
},
];
export default function Downloads() {
const classes = useStyles();
const downloadsForm = useFormik({
initialValues: {
Username: "",
Userlevel: ""
},
// validationSchema: downloadFormSchema,
onSubmit: (values) => {
alert(JSON.stringify(values, null, 2));
}
});
const options = useMemo(() => {
if (userList) {
let levelList = [];
for (let [key, value] of Object.entries(userList)) {
if (value === true) {
levelList.push({ value: key, label: key });
}
}
return levelList;
}
}, [userList]);
React.useEffect(() => {
if (userList) {
downloadsForm.setFieldValue("baseStr", options[0]);
}
}, [options, userList]);
return (
<Grid>
<Grid item xs={12}>
<Card color="primary" variant="outlined">
<form onSubmit={downloadsForm.handleSubmit}>
<CardContent>
<Grid xs={12} item container>
<Grid item xs={6} className={classes.formGrid}>
<TextField
id="outlined-select-currency"
select
label="User"
fullWidth
onChange={downloadsForm.handleChange}
value={downloadsForm.values.Username}
name="Username"
error={downloadsForm.errors.Username}
helperText={downloadsForm.errors.Username}
variant="outlined"
size="small"
>
{userList?.map((opt) => (
<MenuItem key={opt.username} value={opt.username}>
{opt.username}
</MenuItem>
))}
</TextField>
</Grid>
{downloadsForm.values.Username && (
<Grid item xs={6} className={classes.formGrid}>
<TextField
id="outlined-select-currency"
select
label="Level"
fullWidth
onChange={downloadsForm.handleChange}
value={downloadsForm.values.Userlevel}
name="Userlevel"
variant="outlined"
size="small"
>
<MenuItem value={options}>{options}</MenuItem>
</TextField>
</Grid>
)}
</Grid>
<Grid xs={12} item className={classes.formGrid}>
<Box
display="flex"
alignItems="flex-end"
flexDirection="column"
>
<Button variant="contained" color="primary" type="submit">
Submit
</Button>
</Box>
</Grid>
</CardContent>
</form>
</Card>
</Grid>
</Grid>
);
}
【问题讨论】:
-
您的解释不清楚预期的行为。当我在用户下拉列表中选择一个值时,级别文本字段会发生什么?它应该自动填充“真”还是“假”???
-
你可以看到我用一些关于数据如何来的数据更新了代码
-
所以 true 和 false 的值因此取决于选择的用户下拉列表,我们将为 level 选择 true
标签: javascript reactjs material-ui