如何在Signal Store中实现互斥状态的切换与置假逻辑?
解决方法
直接修改activeStatus方法的逻辑,在遍历数组时同时处理两个目标ID的状态:
activeStatus(statusId: string, statusFalse: string): void { patchState(store, { isActive: store.isActive().map((item) => { if (item.id === statusFalse) { return { ...item, status: false }; } if (item.id === statusId) { return { ...item, status: !item.status }; } return item; }), }); }
逻辑解释
- 遍历
isActive列表时,先把指定的statusFalse项(也就是doubleSided)的状态强制设为false,确保它不会和目标项同时激活 - 然后对
statusId项(也就是singleSided)执行状态切换操作 - 其他所有项保持原有状态不变
调用store.activeStatus('singleSided', 'doubleSided')后,就能实现:
singleSided的状态在激活/未激活间切换doubleSided始终处于未激活状态,完全满足二者不能同时为true的要求
内容的提问来源于stack exchange,提问作者Karol
相关产品推荐
相关产品推荐

