我使用的芯片来自"@mui/material/Chip"和Select from "@mui/material/Select";在我的react js应用中。
import * as React from "react";
import { useTheme } from "@mui/material/styles";
import Box from "@mui/material/Box";
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 Select from "@mui/material/Select";
import Chip from "@mui/material/Chip";
const ITEM_HEIGHT = 48;
const ITEM_PADDING_TOP = 8;
const MenuProps = {
PaperProps: {
style: {
maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,
width: 250
}
}
};
const names = [
{
id: 1,
name: "Carl"
},
{
id: 2,
name: "Bill"
}
];
function getStyles(name, personName, theme) {
return {
fontWeight:
personName.indexOf(name) === -1
? theme.typography.fontWeightRegular
: theme.typography.fontWeightMedium
};
}
export default function MultipleSelectChip() {
const theme = useTheme();
const [personName, setPersonName] = React.useState([1]);
const handleChange = (event) => {
const {
target: { value }
} = event;
setPersonName(
// On autofill we get a the stringified value.
typeof value === "string" ? value.split(",") : value
);
};
console.log(personName, "get a list of ids");
return (
<div>
<FormControl sx={{ m: 1, width: 300 }}>
<InputLabel id="demo-multiple-chip-label">Chip</InputLabel>
<Select
labelId="demo-multiple-chip-label"
id="demo-multiple-chip"
multiple
value={personName}
onChange={handleChange}
input={<OutlinedInput id="select-multiple-chip" label="Chip" />}
renderValue={(selected) => (
<Box sx={{ display: "flex", flexWrap: "wrap", gap: 0.5 }}>
{selected.map((value) => (
<Chip key={value} label={value} />
))}
</Box>
)}
MenuProps={MenuProps}
>
{names.map(({ id, name }) => (
<MenuItem
key={name}
value={id}
style={getStyles(name, personName, theme)}
>
{name}
</MenuItem>
))}
</Select>
</FormControl>
</div>
);
}
我现在如果我添加了一个id作为初始值,在下拉菜单中它也显示为数字,但我需要从数组中设置用户的name
。另外,当我将改变console.log(personName, "get a list of ids");
中的输入数据时,我想看到一个id列表,就像现在一样。问题是接下来的:现在下拉初始值是1
,但它应该是Carl
,因为他有id 1,也当我选择Bill
出现在2
,但我需要文本而不是数字。
谁能帮忙?
demo: https://codesandbox.io/s/multipleselectchip-material-demo-forked-lkhzb?file=/demo.js:1264-1309
试着这样渲染Chip
s:
<Chip key={value} label={names.find(element => element.id === value)?.name} />
personName
将保留id列表,但您将呈现相关名称。