{
listData.map((item, index) =>
<TableTr key={index}>
<td><OrderStyle><div>{index + 1}</div></OrderStyle></td>
<td><OrderCenterStyle><div>{item.name}</div></OrderCenterStyle></td>
<td>
<Select
allowClear
style={{ width: 120 }}
onChange={(e) => onChange(e, item)}
>
{dropDownPersonData.map((item) => (
<Option value={item.id} key={item.id}>
{item.name}
</Option>
))}
</Select>
</td>
</TableTr>)
}
代码:
const onChange = (e, item) => {
let newPeopleId = [...peopleId];
let parame = {
variableGroup: peopleData.key, // 变量分组 流程部署key
variableName: item.id, // 变量名 id :"UserTask_1jd1y1z"
variableValue: e, // 变量值 下拉框id
}
if (newPeopleId.length > 0) {
let show = newPeopleId.findIndex(element => element.variableName === item.id)
console.log(show);
if (show === -1) {
newPeopleId.push(
parame
)
} else {
newPeopleId[show] = parame
}
setPeopleId([...newPeopleId]);
} else {
setPeopleId([parame])
}
}
步骤:
1. 使用 useState 初始一个数据, 在 onChange 改变的时候获取下拉框的 id 以及传过来的当前列表项的 id;
2. 声明一个新数组来替 useState 声明的数组变量 把所需要的数据放到参数对象中;
3. 判断新数组中是否有数据, 没有数据就把之前声明的参数对象数据直接放到 useState 数组中;
4. 如果新数组中有数据, 使用 findIndex 方法 判断当前选择的id 是否等于 新数组存的id,
如果等于就标识有这条数据 就把当前选择的数据对象 赋值 给 新数组[下标]这条数据对象
如果不等于标识没有这条数据 就向新数组中添加这条数据对象
5. 最后解构赋值给 useState 生命的数组即可