我依然在新React和MUI,所以請饒我一命。我正在學習使用復選框構建多選選項,并且我已經從陣列填充了下拉選項。
我還設定了初始/默認狀態選項。初始/默認狀態選項(Nintendo 和 XBoX)顯示在主輸入選擇欄位中,但遺憾的是未在下拉復選框中選中標記,如下面的螢屏截圖所示。
截圖 1
我想要實作的是像這樣(默認狀態下的所有選定選項(Nintendo 和 XBoX)在初始頁面加載時顯示在復選框上):
截圖 2
這是我在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>
);
}
uj5u.com熱心網友回復:
您需要對findIndex初始串列中的每個專案進行處理以制作它們checked。
嘗試如下
{
variants.map(variant => (
<MenuItem key={variant.id} value={variant}>
<Checkbox
checked={
variantName.findIndex(item => item.id === variant.id) >= 0
}
/>
<ListItemText primary={variant.name} />
</MenuItem>
));
}
代碼沙箱 => https://stackblitz.com/edit/react-rahqrq-sd2m2b?file=demo.js
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/367823.html
標籤:javascript 反应 材质-ui 选择输入
上一篇:在指定索引處插入資料
