我有一个多重选择,我将一个对象传入带有结构的value属性。
选择组件的结构是这样的
<Select
multiple
value={entities}
onChange={handleChange}
input={<Input />}
renderValue={(selected) => (
<div className={classes.chips}>
{selected.map((value) => (
<Chip
key={value.entityId}
label={value.entityName}
className={classes.chip}
/>
))}
</div>
)}
>
{props.entityList.map((item, index) => (
<MenuItem key={item.entityId} value={item}>
{item.entityName}
</MenuItem>
))}
</Select>
当选择弹出时,它显示的实体名称是正确的,但在下拉菜单中并没有显示它被选中。
如果我在下拉菜单中选择了这个项目,它就会添加另一个具有相同id和相同名称的条目,而不是删除已经存在的项目,这个新添加的重复项目可以被删除,并且在选择时被高亮显示,所以这个功能有点工作。
我正在存储 entities
的状态下,像这样从父组件进来的。
解决方案:
我已经确保在整个选择过程中使用了相同的对象,初始对象与在改变函数中分配的对象不一样,这解决了我的问题。
const [entities, setEntity] = React.useState(
props.entityList.filter((e) =>
props.assignedEntities.some((ae) => e.entityId === ae.entityId)
)
);