【发布时间】:2022-01-05 05:06:51
【问题描述】:
我还是 React 和 MUI 的新手,所以请饶了我的命。我正在学习使用复选框构建多选选项,并且我已经从数组中填充了下拉选项。
我还设置了初始/默认状态选项。初始/默认状态选项(Nintendo 和 XBoX)显示在主输入选择字段中,但遗憾的是未在下拉复选框中选中标记,如下面的屏幕截图所示。
我想要实现的是这样(默认状态下的所有选定选项(Nintendo 和 XBoX)都显示在初始页面加载时的复选框上):
这是我在https://stackblitz.com/edit/react-rahqrq?file=demo.js中的现场演示编码
我很困惑,我可以勾选下拉列表中的所有其他选项复选框,除了来自州的默认初始选项。它不可点击且不可更改,我不知道为什么。非常感谢任何提示和线索,在此先感谢,请原谅我糟糕的语法和最好的问候。
import * as React from 'react';
import OutlinedInput from '@mui/material/OutlinedInput';
import InputLabel from '@mui/material/InputLabel';
import MenuItem from '@mui/material/MenuItem';
import FormControl from '@mui/material/FormControl';
import ListItemText from '@mui/material/ListItemText';
import Select from '@mui/material/Select';
import Checkbox from '@mui/material/Checkbox';
const ITEM_HEIGHT = 48;
const ITEM_PADDING_TOP = 8;
const MenuProps = {
PaperProps: {
style: {
maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
width: 250,
},
},
};
const variants = [
{
id: 3,
name: 'Voucher',
},
{
id: 1,
name: 'Top Up',
},
{
id: 2,
name: 'Game Key',
},
{
id: 12,
name: 'Other',
},
{
id: 11,
name: 'Nintendo',
},
{
id: 10,
name: 'Xbox',
},
];
export default function MultipleSelectCheckmarks() {
const [variantName, setVariantName] = React.useState([{
id: 11,
name: 'Nintendo',
},{
id: 10,
name: 'Xbox'
},]);
const handleChange = (event) => {
const {
target: { value },
} = event;
const preventDuplicate = value.filter((v, i, a) => a.findIndex((t) => t.id === v.id) === i);
setVariantName(
// On autofill we get a the stringified value.
typeof preventDuplicate === 'string' ? preventDuplicate.split(',') : preventDuplicate
);
};
return (
<div>
<FormControl sx={{ m: 1, width: 300 }}>
<InputLabel id="demo-multiple-checkbox-label">Tag</InputLabel>
<Select
labelId="demo-multiple-checkbox-label"
id="demo-multiple-checkbox"
multiple
value={variantName}
onChange={handleChange}
input={<OutlinedInput label="Tag" />}
renderValue={(selected) => selected.map((x) => x.name).join(', ')}
MenuProps={MenuProps}
>
{variants.map((variant) => (
<MenuItem key={variant.id} value={variant}>
<Checkbox checked={variantName.indexOf(variant) > -1} />
<ListItemText primary={variant.name} />
</MenuItem>
))}
</Select>
</FormControl>
</div>
);
}
【问题讨论】:
标签: javascript reactjs material-ui selectinput