gpt4 book ai didi

javascript - 将选项作为对象数组进行多项选择

转载 作者:行者123 更新时间:2023-12-05 03:37:03 25 4
gpt4 key购买 nike

我有以下用于选择 Angular 色的组件:

enter image description here

export const MultipleSelectChip = ({
options,
label,
error,
onRolesUpdate,
}: Props) => {
const theme = useTheme();
const [selectedOptions, setSelectedOptions] = React.useState<string[]>([]);

const handleChipChange = (
event: SelectChangeEvent<typeof selectedOptions>,
) => {
const {
target: { value },
} = event;
setSelectedOptions(
// On autofill we get a the stringified value.
typeof value === 'string' ? value.split(',') : value,
);
};

return (
<div>
<FormControl sx={{ m: 1, width: 300 }}>
<InputLabel id="multiple-chip-label">{label}</InputLabel>
<Select
required
labelId="multiple-chip-label"
error={error}
id="demo-multiple-chip"
multiple
value={selectedOptions}
onChange={handleChipChange}
input={<OutlinedInput id="select-multiple-chip" label={label} />}
renderValue={(selected) => (
<Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 0.5 }}>
{selected.map((value) => (
<Chip key={value} label={value} />
))}
</Box>
)}
MenuProps={MenuProps}
>
{options.map((propOption) => (
<MenuItem
key={propOption.id}
value={propOption.name}
style={getStyles(propOption, selectedOptions, theme)}
>
{propOption.name}
</MenuItem>
))}
</Select>
<FormHelperText>Here's my helper text</FormHelperText>
</FormControl>
</div>
);
};

对于选项,我有一个带有 id 和名称的对象数组,问题是我想使用名称来显示芯片和 id 以将它们传递给添加请求的父组件。我也不知道如何获取de ids。

这是示例:https://codesandbox.io/s/6ry5y?file=/demo.tsx但使用的是字符串数组而不是对象数组。

这是“选项”的样子:

const rolesDummy: Role[] = [
{ id: '61fb0f25-34aa-46c6-8683-093254223dcd', name: 'HR' },
{ id: '949b9b1e-d3f8-45cb-a061-08da483bd486', name: 'Interviewer' },
{ id: 'c09ae2d4-1335-4ef0-8d4b-ee9529796b52', name: 'Hiring Manager' },
];

我只需要取回选定的 ID

谢谢!

最佳答案

如果将选项作为对象传递,则可以使用 option.id 作为 key 呈现每个 MenuItem >option.name 作为标签。 MenuItem 由 id 标识:

<Select {...}>
{options.map((option) => (
<MenuItem key={option.id} value={option.id}>
{option.name}
</MenuItem>
))}
</Select>

显示所选芯片中的名称。使用renderValue,但它只提供给你选择的值(option.id数组),所以你需要找到选项来获取名称:

renderValue={(selected) => {
return (
<Box>
{selected.map((value) => {
const option = options.find((o) => o.id === value);
return <Chip key={value} label={option.name} />;
})}
</Box>
);
}}

现在,您可以通过添加一个change 处理程序来获取选定 ID 的数组:

onChange={e => console.log(e.target.value)}

Codesandbox Demo

关于javascript - 将选项作为对象数组进行多项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69465105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com