我想实现将设备移动到用户创建的组的功能。功能是用户选择时的功能 设备,出现一个创建组按钮。单击“创建组”按钮将打开表单,供用户创建组和 当用户使用组名填充表单时,将运行具有POST功能的saga的createGroup 并且创建组的URL是
/ device_groups
,我已经完成并且正在工作,但现在用户已经创建了所选的组 设备应移动到该创建的组。我该怎么做?将设备发布到该创建的组的URL是
/ device_group /的groupId /添加
简而言之,用户选择设备或设备并显示创建组按钮,用户创建一个组,然后应将那些选定的设备移动到该组。
并且它只接受所选设备ID的列表。
function* createGroup(action) {
console.log('action', action);
const group = action.group;
const deviceId = action.deviceId;
if (yield call(isGroupValid, fromJS(action.group))) {
yield fork(POST(`/device_groups`, createGroupSuccess, createGroupError, group));
}
}
case CREATE_GROUP:
return state
.set('loading', true)
.set('error', null);
case CREATE_GROUP_SUCCESS:
const deviceGroups = fromJS(action.group, idReviver);
return state.set('loading', false).set('error', null)
.setIn(['deviceGroups', deviceGroups.get('id')], deviceGroups);
export function createGroup(group, deviceId) {
return {
type: CREATE_GROUP,
group,
deviceId
};
}
export function createGroupSuccess(group) {
return {
type: CREATE_GROUP_SUCCESS,
group,
};
}
答案 0 :(得分:0)
如果可能,我会做的是更改组创建api端点以接受进入该组的设备ID列表。这样你只需要拨打一个api电话。
如果那是不可能的,我会修改传奇来做类似的事情:
function* createGroup(action) {
try {
const group = action.group;
const deviceIds = action.deviceIds;
if (yield call(isGroupValid, fromJS(action.group))) {
// Create group
const createdGroup = yield call(API.createGroup, group);
// Add devices to new group
yield deviceIds.map((deviceId) => call(API.addDeviceToGroup, createdGroup, deviceId));
// Success action
yield put(createGroupSuccess(createdGroup));
}
} catch (e) {
yield put(createGroupFailed(group));
}
}
此处API包含返回promises并执行实际休息调用的函数。